0

我有一个使用 mongoose 连接到 mongodb 的 node.js 应用程序;我需要选择所有插入的文档,我遇到了异步问题。

我制作了一个具有以下功能的模型:

exports.listItems=function() {
    Ticket.find({}, function(err,tkts) {
            console.log(tkts);
            return tkts;
    });
}

我正确地看到了“tkts”的值,但是当我从以下位置调用它时:

exports.list = function(req,res) {
    var items=db.listItems();
    console.log("Items:"+items);
    res.render('list', { title: title, items:items });
}

在 app.js 中定义为:

app.get('/list', routes.list);

items 未定义(我认为是因为 db.list() 的非异步定义)。

我做错了什么,如何纠正?

4

1 回答 1

1

您需要更恰当地使用回调。

更传统的listItems功能是

exports.listItems = function(done) {
    Ticket.find({}, done);
}

然后,在 中list,您可以执行以下操作:

exports.list = function(req,res) {
    db.listItems(function(err,items){
        console.log("Items:"+items);
        res.render('list', { title: title, items:items });
    });
}

由于 Node.JS 的异步特性,您应该始终在函数中传递(并期望)回调。这样您就可以在执行异步操作时推迟执行。

Also: be sure to check out async, its an insanely good and easy-to-use library, that will simplify complex async scenarios in a breeze.

于 2013-01-25T15:50:39.847 回答