Gebruik de async
bibliotheek die het meest geschikt is voor dit scenario. Waar u meerdere taken moet uitvoeren die niet van elkaar afhankelijk zijn en wanneer ze allemaal iets anders moeten doen, moet u async.parallel()
methode. De handtekening is async.parallel(tasks, callback)
, waar taken een reeks functies is.
Het zal onmiddellijk alle functies parallel uitvoeren, wachten tot ze allemaal hun taak terugbellen, en uiteindelijk wanneer alle taken zijn voltooid, zal het terugbellen uitvoeren (de laatste terugroepactie).
Het volgende voorbeeld laat zien hoe dit kan worden aangepast aan uw gebruikssituatie:
router.get('/profile', function(req, res, next) {
mongo.connect(url, function(err, db) {
var locals = {};
var tasks = [
// Load users
function(callback) {
db.collection('users').find({}).toArray(function(err, users) {
if (err) return callback(err);
locals.users = users;
callback();
});
},
// Load colors
function(callback) {
db.collection('colors').find({}).toArray(function(err, colors) {
if (err) return callback(err);
locals.colors = colors;
callback();
});
}
];
async.parallel(tasks, function(err) { //This function gets called after the two tasks have called their "task callbacks"
if (err) return next(err); //If an error occurred, let express handle it by calling the `next` function
// Here `locals` will be an object with `users` and `colors` keys
// Example: `locals = {users: [...], colors: [...]}`
db.close();
res.render('profile/index', locals);
});
});
});