Mongoose и BlueBird возвращаются с обещаний
Я использую мангуста и синюю птицу в качестве основы для обещаний. Каждый раз, когда я использую "сохранить" или "удалить", я получаю эту ошибку:
Warning: a promise was created in a handler but was not returned from it
Я действительно пытался потратить на это несколько дней, пока гуглял, я пробовал так много способов, чтобы упомянуть некоторые:
- Создание обещания и разрешение его в сохранении / удалении CB;
- положить "возврат" во многих логических комбинациях, чтобы убедиться, что он всегда "возвращается" из обещания.
- Создание функций в модели и присвоение ей имени "saveAsync" (я видел это в одном примере) и выполнение всей обработки обещаний.
Довольно забавно, но я попытался обновить все свои пакеты проекта 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")();
который создает отдельную копию.