小编Özg*_*sal的帖子

使用Bluebird进行Mongoose承诺的正确方法是什么?

我一直在阅读文档和文章,每个人似乎都描述了一起使用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.

真的与不同的文档混淆了.如果有人能够对此有所了解,我将不胜感激.

mongoose bluebird

10
推荐指数
2
解决办法
9641
查看次数

标签 统计

bluebird ×1

mongoose ×1