无法弄清楚与mongod和nodejs的承诺

时间:2015-05-25 08:54:31

标签: javascript node.js mongodb

我有一个函数getStuff()需要返回针对MongoDB的查询结果。我正在使用nodejs和mongod模块。这是我得到的代码。

var mongo = require("mongod");
var url = "mongodb://localhost:27017/my-mongo";

function getStuff() {
    var db = new mongo(url, ["stuff"]);
    var promise = db.stuff.find()
        .then(function (result) {
            console.log(result);
            return result;
        }).done(function (data) {
            console.log(data);
            return data;
        });
    console.log(promise);
    return promise;
}

exports.getStuff = getStuff;

我显然错过了有关承诺如何运作的一些信息。我在前两个console.log()调用中获得了良好的数据。但是getStuff()函数总是返回undefined。这似乎应该是一个超级简单的用例,但我正在我的桌子上试着让它正常工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您的上一个日志和返回语句在.find.then.done链仍在执行时运行(对于您来说是异步!)。这就是promise仍为undefined的原因。

尝试返回整个承诺,而不是回复 var promise = db.stuff.find()... 尝试
return db.stuff.find()...

答案 1 :(得分:1)

  

......需要返回结果......

getStuff

获取数据
function getStuff(callback) {
    var db = new mongo(url, ["stuff"]);
    db.stuff.find()
    .done(function (result) {
            console.log(result);
            callback(result);
     }));
}

然后你可以这样称呼它

getStuff(function(data){
//here you will get your results
});