Nodejs使用异步调用返回mongodb 2集合数据 - 需要改进代码

时间:2013-05-13 12:43:32

标签: javascript node.js mongodb closures

我想改进代码

当我从客户端进行ajax调用时,这是node.js代码,我需要发回的数据是mongodb中两个集合的内部联接

因为mongodb调用是异步的

app.get('/temppage', ensureAjaxAuthenticated, function(req, res){
    var insertData1 = {
        "valid" : true
    };
    var output = new Array();
    db.collection('coll1').find(insertData1).toArray(function(err, calllist1){
        for(var i=0; i < calllist1.length; i++)
        {
            var insertData2 = {
                "coll1_id" : calllist1[i]._id
            };
            db.collection('coll2').find(insertData2).toArray(function(err, calllist2){

                output[i] = calllist1;
                output[i].calllist2 = calllist2;
                if(i == (calllist1.length - 1) )
                {
                    res.send(output) ;
                }
            });
        }
    });
});

上面的代码工作正常但是 如果我这样做

 app.get('/temppage', ensureAjaxAuthenticated, function(req, res){
    var insertData1 = {
        "valid" : true
    };
    var output = new Array();
    db.collection('coll1').find(insertData1).toArray(function(err, calllist1){
        for(var i=0; i < calllist1.length; i++)
        {
            var insertData2 = {
                "coll1_id" : calllist1[i]._id
            };
            db.collection('coll2').find(insertData2).toArray(function(err, calllist2){

                output[i] = calllist1;
                output[i].calllist2 = calllist2;
            });
        }
    });
    res.send(output) ;
});

问题是'输出[i] .calllist2'即将发现 请帮忙
(可以通过使用闭包或任何方法改进上面的代码吗?)

0 个答案:

没有答案