我试图在渲染 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
});
};
最佳答案
我是 underscore/lodash 的忠实粉丝,所以我通常使用 _.after
,它创建了一个只有在被调用一定次数后才会执行的函数。
var finished = _.after(2, doRender);
asyncMethod1(data, function(err){
//...
finished();
});
asyncMethod2(data, function(err){
//...
finished();
})
function doRender(){
res.render(); // etc
}
由于 javascript 提升了使用 function funcName()
语法定义的函数的定义,因此您的代码自然会读取:从上到下。
关于javascript - Node.js - 等待多个异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008479/