Gunakan async
perpustakaan yang paling cocok untuk skenario ini. Di mana Anda perlu menjalankan banyak tugas yang tidak bergantung satu sama lain dan ketika semuanya selesai lakukan sesuatu yang lain, Anda harus menggunakan async.parallel()
metode. Tanda tangannya adalah async.parallel(tasks, callback)
, di mana tugas adalah array fungsi.
Ini akan segera menjalankan semua fungsi secara paralel, menunggu semuanya memanggil panggilan balik tugas mereka, dan akhirnya ketika semua tugas selesai, itu akan menjalankan panggilan balik (panggilan balik terakhir).
Contoh berikut menunjukkan bagaimana hal ini dapat disesuaikan untuk kasus penggunaan Anda:
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);
});
});
});