我试图在呈现Jade模板之前进行多个MongoDB查询,但我无法完全弄清楚如何等待所有Mongo查询在呈现模板之前完成。Node.js - 等待多个异步调用
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
}
);
};
很干净。尼斯。 –
这将有一个竞争条件。如果两个异步操作直到它们调用complete()之前执行完毕,那么它们都可以用必要的条件调用它,以执行complete()中的if语句的主体。不太可能,但可能。 – 2017-06-06 16:30:03
@ ghert85在多线程环境中,你会是对的,但node.js是单线程的。所以直到它返回到事件循环之后,代码才能被中断,并且这种竞争条件不会发生。 –