Sto provando a creare più query MongoDB prima di eseguire il rendering di un modello Jade, ma non riesco a capire come attendere fino a quando tutte le query Mongo sono state completate prima di rendere il modello .Node.js - attendere più chiamate asincrone
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
}
);
};
Molto pulito. Bello. –
Questo avrebbe una condizione di gara. Se entrambe le operazioni asincrone vengono eseguite fino a destra prima che chiamino complete(), allora potrebbero chiamarle con la condizione necessaria per eseguire il corpo dell'istruzione if in complete(). Improbabile, ma possibile. –
@ ghert85 In un ambiente con multithreading avresti ragione, ma node.js è single threaded. Quindi il codice non può essere interrotto fino a quando non ritorna al ciclo degli eventi e questa condizione di competizione non può verificarsi. –