javascript – Node.js – 等待多个异步调用

我想在渲染一个Jade模板之前进行多个MongoDB查询,但是我不知道如何等到所有的Mongo查询完成之前渲染模板。

    exports.init = function(req, res){


        var NYLakes = {};
        var NJLakes = {};
        var filterNY = {"State" : "NY"};
        db.collection('lakes').find(filterNY).toArray(function(err, result) {
            if (err) throw err;
            NYLakes = result;
        });

        var filterNJ = {"State" : "NJ"};
        db.collection('lakes').find(filterNJ).toArray(function(err, result) {
            if (err) throw err;
            NJLakes = result;
        });

        res.render('explore/index',
            {
                NYlakes: NYLakes,
                NJlakes: NJLakes
            }
        );

    };
我是下划线/ lodash的大粉丝,所以我通常使用_.after,它创建一个函数,只有在被调用一定次数后才执行。

var finished = _.after(2, doRender);

asyncMethod1(data, function(err){
  //...
  finished();
});

asyncMethod2(data, function(err){
  //...
  finished();
})

function doRender(){
  res.render(); // etc
} 

由于javascript提升了函数funcName()语法定义的函数的定义,你的代码自然地读取:从上到下。

http://stackoverflow.com/questions/18008479/node-js-wait-for-multiple-async-calls

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – Node.js – 等待多个异步调用