Mongoose и BlueBird возвращаются с обещаний

Я использую мангуста и синюю птицу в качестве основы для обещаний. Каждый раз, когда я использую "сохранить" или "удалить", я получаю эту ошибку:

Warning: a promise was created in a handler but was not returned from it

Я действительно пытался потратить на это несколько дней, пока гуглял, я пробовал так много способов, чтобы упомянуть некоторые:

  1. Создание обещания и разрешение его в сохранении / удалении CB;
  2. положить "возврат" во многих логических комбинациях, чтобы убедиться, что он всегда "возвращается" из обещания.
  3. Создание функций в модели и присвоение ей имени "saveAsync" (я видел это в одном примере) и выполнение всей обработки обещаний.
  4. Довольно забавно, но я попытался обновить все свои пакеты проекта npm, потому что я видел разговоры об этом в github, и кто-то упоминал, что они уже решили это. но это не сработало.

    И многое другое.. Я действительно в отчаянии.
    Не поймите меня неправильно, код прекрасно работает, но каждый раз, когда я вижу это ОГРОМНОЕ предупреждение в моей консоли, я чувствую себя действительно виноватым.

Какие-либо предложения?

1 ответ

Эта ошибка означает, что какой-то код сделал что-то вроде:

somePromise.then(x => {
    someOtherPromiseReturningFunction();
}).then(value => {
   // forgot a return, oh dear
});

Что является очень распространенной ошибкой забывать returnэто портит обработку ошибок и вызывает проблемы.

Иногда проблема не в вашем коде, а в коде библиотеки, которую вы используете - в этом случае вы должны отключить предупреждения для этого кода:

  • Требовать Bluebird отдельно для вашего собственного кода и для мангуста через require("bluebird") и используйте его с предупреждениями.
  • Отключить предупреждения для использования копий мангуста.

Вы можете получить две копии Bluebird, используя require("bluebird") в вашем коде и переопределении мангуста с require("bluebird/js/release/promise")(); который создает отдельную копию.

Другие вопросы по тегам