我一直在阅读文档和文章,每个人似乎都描述了一起使用 Mongoose 和 Bluebird 的不同方式。甚至 Mongoose 官方文档说了些什么 http://mongoosejs.com/docs/promises.html蓝鸟文档说另一件事 http://bluebirdjs.com/docs/api/promisification.html.
根据猫鼬的说法:
mongoose.Promise = require('bluebird');
根据蓝鸟的说法:
var Promise = require("bluebird");
Promise.promisifyAll(require("mongoose"));
据我了解,如果您选择 Mongoose 方式,示例查询将如下所示:
User.findById('someId')
.then(function(){
// do stuff
})
.catch(function(err){
// handle error
})
但 Mongoose 文档中也提到:
猫鼬查询不是承诺。然而,它们确实有一个用于yield和async/await的.then()函数。如果您需要完整的承诺,请使用 .exec() 函数。
所以在这种情况下,是.then
是否高于承诺?
如果你选择蓝鸟方式:
User.findById('someId')
.execAsync()
.then(function(){
// do stuff
})
.catch(function(err){
// handle error
})
或者甚至可以跳过execAsync()
并开始于findByIdAsync
反而。
真的很困惑不同的文档。如果有人能对此有所启发,我将不胜感激。
选择猫鼬方式:
mongoose.Promise = require('bluebird');
那是因为猫鼬already支持 Promise(除了还接受回调);上面的代码只是替换了Mongoose自己的promise库(mpromise https://github.com/aheckmann/mpromise)由 Bluebird (它可能更快,测试得更好,并且有更多可用的实用功能)。
蓝鸟的promisify*()
是为了允许不允许的代码already使用 Promise(纯粹基于回调的函数)返回 Promise。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)