我一直在阅读文档和文章,每个人似乎都描述了一起使用Mongoose和Bluebird的不同方式.甚至官方的Mongoose文档也说明了一些事情,Bluebird文档说了另一件事.
据Mongoose说:
mongoose.Promise = require('bluebird');
Run Code Online (Sandbox Code Playgroud)
据Bluebird说:
var Promise = require("bluebird");
Promise.promisifyAll(require("mongoose"));
Run Code Online (Sandbox Code Playgroud)
所以据我所知,如果您选择Mongoose方式,示例查询将是:
User.findById('someId')
.then(function(){
// do stuff
})
.catch(function(err){
// handle error
})
Run Code Online (Sandbox Code Playgroud)
但在Mongoose文档中它也说:
Mongoose查询不是承诺.但是,它们对yield和async/await都有.then()函数.如果您需要完全成熟的承诺,请使用.exec()函数.
那么在这种情况下,是否.then高于承诺?
如果你选择Bluebird方式:
User.findById('someId')
.execAsync()
.then(function(){
// do stuff
})
.catch(function(err){
// handle error
})
Run Code Online (Sandbox Code Playgroud)
或者甚至可以跳过execAsync()并开始findByIdAsync.
真的与不同的文档混淆了.如果有人能够对此有所了解,我将不胜感激.