我有一个mongojs查询,例如:

db.mapping.find(
    { "provider":req.params.provider, "perId":mongojs.ObjectId(req.params.perId) },
    function(err, que){
        if(err)
            res.send(err);
        else if(que)
        {
            totalVideoList = [];

            for (var i=0; i < que.length; i++)
            {
                myid = que[i].providerId;

                db.ABC.find({}, function(err, que1){
                    if(err)
                        res.send(err);

                    var x = {};
                    for (var j=0; j < que1.length; j++)
                    {
                        searching(que1[j]);
                    }

                    videoList = [];
                    getVideo(requiredDocument);

                    totalVideoList = totalVideoList.concat(videoList);

                });
            }
            res.json(totalVideoList);

        }
        else
            res.json([]);
    });


目前,我总是收到[](空数组)作为响应。问题是由于mongojs的回调函数具有异步特性。在预期的输出进入“ totalVideoList”变量之前,它以totalVideoList = []响应我们。
我不知道如何在这里使用async.each()。请帮助我解决这个问题。

最佳答案

假设使用async

db.mapping.find(
    { "provider":req.params.provider, "perId":mongojs.ObjectId(req.params.perId) },
    function(err, que){
        if(err)
            res.send(err);
        else if(que)
        {
            totalVideoList = [];

            async.each(que, function(item, callback){
              myid = item.providerId;

                db.ABC.find({}, function(err, item){
                    if(err)
                        return callback(err);

                    var x = {};
                    for (var j=0; j < item.length; j++)
                    {
                        searching(item[j]);
                    }

                    videoList = [];
                    getVideo(requiredDocument);

                    totalVideoList = totalVideoList.concat(videoList);
                    callback(null);

                });
            }, function(asyncErr){
              if(asyncErr)
                 return resp.json(asyncErr);
                 resp.json(totalVideoList);
            });
        }
        else
            res.json([]);
    });

10-06 03:21