Mongoose:“.find(...).exec(...).then(...).catch(...).finally 不是函数”使用蓝鸟?
Posted
技术标签:
【中文标题】Mongoose:“.find(...).exec(...).then(...).catch(...).finally 不是函数”使用蓝鸟?【英文标题】:Mongoose: ".find(...).exec(...).then(...).catch(...).finally is not a function" using bluebird? 【发布时间】:2018-03-23 06:27:27 【问题描述】:我目前正在尝试将 Promises 与 Mongoose 一起使用。 我已经读到,从 4.1 开始,添加了 mPromise 以及插入外部 Promise 库(如 bluebird 或 q)的能力。
我对只需要然后捕获的基本承诺没有任何问题,但是,当我尝试使用 Bluebird 方法 finally
时,我最终无法这样做,并出现上述错误。这是一个代码sn-p:
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));
我还确定需要蓝鸟
var Promise = require('bluebird');
var mongoose = require('mongoose');
mongoose.Promise = Promise;
知道为什么 mongoose 不返回 Bluebird 承诺吗?
谢谢
【问题讨论】:
【参考方案1】:当然,经过几个小时的努力,我在 SO 上发帖并找到了答案 :) 感谢 Anton Novik 的回答 https://***.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 !
删除分配后,确保每个 mongoose 分配都是本地范围的,现在解决了!
【讨论】:
以上是关于Mongoose:“.find(...).exec(...).then(...).catch(...).finally 不是函数”使用蓝鸟?的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose find().exec() 承诺问题 [重复]