Bluebird .then():不能正常工作

时间:2016-01-21 14:45:13

标签: javascript node.js mongodb promise bluebird

我刚开始使用promises和Bluebird。在调试时我可以看到我的函数执行了两次:

首先我收到此错误:TypeError: Uncaught error: Cannot read property 'then' of undefined

然后我看到该函数再次执行,.then()成功执行。我也在控制台中打印了正确的信息。

为什么会这样?我实现promises的全部原因是因为我想等待执行then() - 操作,因为我的数据必须先被检索。但是代码仍然过早地跳转到.then()动作。

为什么会发生这种情况,我该如何预防?

这是我的代码:

exports.findUser = function(userId){

    var ObjectID = require('mongodb').ObjectID;
    var u_id = new ObjectID(userId);

    db.collection('users')
        .findOne({'_id': u_id})
        .then(function(docs) { //executed twice, first time error, second time success
            console.log(docs); //prints correct info once executed
            return docs;
        })
        .catch(function(err) {
            console.log(err);
        });
};

1 个答案:

答案 0 :(得分:1)

使用本机npm模块时,您应该在此处使用回调,例如documentation。所以对于你的例子,这意味着:

exports.findUser = function(userId){

    var ObjectID = require('mongodb').ObjectID;
    var u_id = new ObjectID(userId);

    db.collection('users')
        .findOne({'_id': u_id}, function(err, docs){
            console.log(docs); //prints correct info once executed
            return docs;
        });
};

如果你想使用承诺,你应该考虑使用像mongoose这样的东西。