Node.js - wait for multiple async calls
javascript, mongodb, node.js
Solution
I'm a big fan of underscore/lodash, so I usually use `_.after`, which creates a function that only executes after being called a certain number of times.
var finished = _.after(2, doRender);
asyncMethod1(data, function(err){
//...
finished();
});
asyncMethod2(data, function(err){
//...
finished();
})
function doRender(){
res.render(); // etc
}
Since javascript hoists the definition of functions defined with the `function funcName()` syntax, your code reads naturally: top-to-bottom.
Problem
I'm trying to make multiple MongoDB queries before I render a Jade template, but I can't quite figure out how to wait until all the Mongo Queries are completed before rendering the template. ``` 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 }); }; ```