蓝鸟';s Promise.map()在插入Mongoose.Promise时不使用Mongoose
我目前正在与猫鼬和蓝鸟合作,作为一个插入式Promise库。 在以下mongoose文档中,我做了以下工作:蓝鸟';s Promise.map()在插入Mongoose.Promise时不使用Mongoose,mongoose,bluebird,Mongoose,Bluebird,我目前正在与猫鼬和蓝鸟合作,作为一个插入式Promise库。 在以下mongoose文档中,我做了以下工作: var mongoose = require('mongoose'); mongoose.Promise = require('bluebird'); // Some function making use of Bluebird's Promise.map() function someFn() { return Promise.map([ someModel
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
// Some function making use of Bluebird's Promise.map()
function someFn() {
return Promise.map([
someModel.findById(someId).exec(),
someOtherModel.findById(someOtherId).exec()
], mapperFn)
.then(function() {})
.catch(function() {});
}
如您所见,我试图在我的代码中使用bluebird的Promise.map()
,但我一直遇到以下错误:
TypeError: Promise.map is not a function
然后我尝试要求bluebird并将其设置为一个新的var Promise
,如下所示
var mongoose = require('mongoose');
var Promise = require('bluebird');
// Some function making use of Bluebird's Promise.map()
function someFn() {
return Promise.map([
someMode.findById(someId).exec(),
someOtherModel.findById(someOtherId).exec()
], mapperFn)
.then(function() {})
.catch(function() {});
}
这是可行的,但似乎不是解决这个问题的正确方法。我不知道这是否会导致与mongoose代码中的其他变量发生冲突
有什么建议可以使这项工作正常进行吗?您获得的错误是由于定义了
mongoose.Promise
而不是Promise
,然后使用了Promise
,这是一个在该范围内不存在的变量
第二种方法似乎并不是在mongoose
中修改任何内容。然而,为了确保这一点,看看promiseArray
是如何定义的将是一件有趣的事情
然后,我不建议将
未定义的
作为然后
和捕获
的处理程序传递。您获得的错误是由定义mongoose.Promise而不是Promise
引起的,然后使用Promise
,这是一个在该范围内不存在的变量
第二种方法似乎并不是在mongoose
中修改任何内容。然而,为了确保这一点,看看promiseArray
是如何定义的将是一件有趣的事情
然后,我不建议将undefined
作为Then
和catch
的处理程序传递。为了使用Promise.map()
,您需要将Promise
定义为Bluebird对象,而不仅仅是常规的ES6Promise
。您可以这样做:
let Promise = require('bluebird');
mongoose.Promise = Promise;
或者,你甚至可以这样做:
let Promise = mongoose.Promise = require('bluebird');
实际上,您正试图使用常规ES6版本的Promise
来实现Promise.map()
第二种方法是正确地将Promise
定义为Bluebird的库,这就是为什么Promise.map()
有效的原因,但您没有将Bluebird的promises用于mongoose,这在某些情况下是有效的,因为不同类型的Promise之间存在互操作性,只要您只使用
关于猫鼬带来的承诺,没有什么比无数蓝鸟更特别的附加方法。为了使用Promise.map()
,您需要将Promise
定义为蓝鸟的对象,而不仅仅是普通的ES6Promise
。您可以这样做:
let Promise = require('bluebird');
mongoose.Promise = Promise;
或者,你甚至可以这样做:
let Promise = mongoose.Promise = require('bluebird');
实际上,您正试图使用常规ES6版本的Promise
来实现Promise.map()
第二种方法是正确地将Promise
定义为Bluebird的库,这就是为什么Promise.map()
有效的原因,但您没有将Bluebird的promises用于mongoose,这在某些情况下是有效的,因为不同类型的Promise之间存在互操作性,只要您只使用
关于猫鼬的承诺,没有什么特别的,比如无数的蓝鸟附加方法。让我编辑它,以显示我正在做的事情的更准确的图片。按照你的建议,通过将mongoose.Promise
更改为Promise
,我成功了。现在,我的问题是,这是否会将蓝鸟应用到猫鼬的其他承诺中?更好的说法是,这会覆盖mongoose的默认mpromise吗?根据mongoose文档,mongoose使用承诺/A+合规承诺。这意味着他们应该能够与bluebird进行互操作,bluebird也可以实现Promises/A+标准。按照你的第二种方法,你不会以任何方式改变猫鼬。现在,强烈建议如果您想使用蓝鸟,您仍然可以执行mongoose.Promise=require('bluebird')
步骤。让我对其进行编辑,以显示我正在做的事情的更准确的图片。按照您的建议,将mongoose.Promise
更改为Promise
,我已经成功了。现在,我的问题是,这是否会将蓝鸟应用到猫鼬的其他承诺中?更好的说法是,这会覆盖mongoose的默认mpromise吗?根据mongoose文档,mongoose使用承诺/A+合规承诺。这意味着他们应该能够与bluebird进行互操作,bluebird也可以实现Promises/A+标准。按照你的第二种方法,你不会以任何方式改变猫鼬。现在,强烈建议如果您想使用蓝鸟,您仍然可以执行mongoose.Promise=require('bluebird')
步骤。有趣的是,它还可以使用sequelize
:let Promise=sequelize.Promise=require('bluebird')代码>有趣,它还与sequelize
一起工作:让Promise=sequelize.Promise=require('bluebird')代码>