Mongoose承诺内置但不工作?

时间:2015-08-10 14:45:45

标签: node.js mongodb

或者很可能我做错了,事实上,我做错了很可能。

有一张包含"树的表格"技巧,从根级别开始,可能深达十个级别(目前只有两个级别),但我想将其作为一个大胖子JSON结构返回,所以我想向数据库询问每组数据,构建我的结构然后要求下一个级别。

当然,如果我只是使用mongoose发送我的请求,他们会随时回来,因为它们都是很好的异步调用。通常是一件好事。

查看Mongoose的文档(使用4.1.1),似乎它内置了一个承诺,但每当我尝试使用它时,api调用抛出一个非常合适的东西,我得到500回。

这是我的简单功能:

exports.getSkills = function(req,res) {
    console.log("Will return tree of all skills");
    for (var i = 0; i<10; i++){
        var returnData = [];
        console.log("Lets get level " + i );
        var query = Skill.find({level: i });//The query function
        var promise = query.exec; //The promise?
        promise.then(function(doc) { //Totally blows up at this point
            console.log("Something came back")
            return "OK";
        });
    }
}

可以在此处找到关于该主题的Mongoose文档 http://mongoosejs.com/docs/api.html#promise_Promise

1 个答案:

答案 0 :(得分:1)

var promise = query.exec;
// =>
var promise = query.exec()
exports.getSkills = function(req,res) {
    console.log("Will return tree of all skills");
    var p;
    for (var i = 0; i < 10; i ++) {
        if (i == 0 ) { 
            p = Skill.find({level:i}).exec();
        } else {
            p.then(function (){
                return Skill.find({level:i}).exec()
            })
        }   
        p.then(function (data) {
            //deal with your data
        })
    }
    p.then(function () {
        // deal with response
    })
}