猫鼬:“。find(...)。exec(...)。then(...)。catch(...)。finally不是”使用蓝鸟的功能?

时间:2017-10-11 14:17:31

标签: javascript node.js mongoose promise bluebird

我目前正在尝试将Promises与Mongoose一起使用。 我已经读过,从4.1开始,添加了mPromise以及插入外部promises库(如bluebird或q)的能力。

我对基本承诺没有任何问题,只有需要然后才能捕获,当我尝试使用then时,一个蓝鸟方法,我最终无法做到这一点,上述错误。这是一段代码:

finally

我也确保要求蓝鸟

mongoose.connect(uri, { useMongoClient: true, promiseLibrary: require('bluebird')})
                .then(() => {
                    MyModel.find(query).exec()
                        .then(res => resolve(res) 
                        .catch(err => reject(err))
                        .finally(() => {
                            mongoose.connection.close();
                        });
                })
                .catch(err => console.error(err));

为什么mongoose没有回归Bluebird承诺?

谢谢

1 个答案:

答案 0 :(得分:1)

当然,经过几个小时的奋斗,我发布了SO并找到答案:) 感谢Anton Novik的回答 https://stackoverflow.com/a/42313136/8569785 在另一个线程中,我设法插入蓝鸟。

事实证明,项目中的一个文件有一个

var mongoose = require('mongoose');
mongoose.promise = require('bluebird');

接下来的几行后面的另一个作业被忽视:

mongoose.promise = global.Promise // Effectively assigning mongoose promise to the native implementation, oops ! 

删除作业后,确保每个猫鼬作业都是本地作品,现在已经解决了!