Brug async
bibliotek, der er bedst egnet til dette scenarie. Hvor du skal køre flere opgaver, der ikke er afhængige af hinanden, og når de alle er færdige med at gøre noget andet, bør du bruge async.parallel()
metode. Signaturen er async.parallel(tasks, callback)
, hvor opgaver er en række funktioner.
Den vil straks køre alle funktionerne parallelt, vente på, at de alle kalder deres opgavetilbagekald, og til sidst, når alle opgaver er afsluttet, vil den køre tilbagekald (det sidste tilbagekald).
Følgende eksempel demonstrerer, hvordan dette kunne tilpasses til din brug:
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);
});
});
});