並行多工處理
async.parallel(tasks, afterTasksCallback) 將並行執行一組任務並等待所有任務的結束 (通過呼叫回撥函式報告)。
任務完成後,非同步呼叫主回撥,包含所有錯誤和所有任務結果。
function shortTimeFunction(callback) {
setTimeout(function() {
callback(null, 'resultOfShortTime');
}, 200);
}
function mediumTimeFunction(callback) {
setTimeout(function() {
callback(null, 'resultOfMediumTime');
}, 500);
}
function longTimeFunction(callback) {
setTimeout(function() {
callback(null, 'resultOfLongTime');
}, 1000);
}
async.parallel([
shortTimeFunction,
mediumTimeFunction,
longTimeFunction
],
function(err, results) {
if (err) {
return console.error(err);
}
console.log(results);
});
結果: ["resultOfShortTime", "resultOfMediumTime", "resultOfLongTime"]
。
用物件呼叫 async.parallel()
你可以用物件替換 tasks 陣列引數。在這種情況下,結果也將是具有與任務相同的鍵的物件。
計算某些任務並輕鬆找到每個結果非常有用。
async.parallel({
short: shortTimeFunction,
medium: mediumTimeFunction,
long: longTimeFunction
},
function(err, results) {
if (err) {
return console.error(err);
}
console.log(results);
});
結果: {short: "resultOfShortTime", medium: "resultOfMediumTime", long: "resultOfLongTime"}
。
解決多個值
每個並行函式都傳遞一個回撥函式。此回撥可以返回錯誤作為第一個引數或之後的成功值。如果回撥傳遞了幾個成功值,則這些結果將作為陣列返回。
async.parallel({
short: function shortTimeFunction(callback) {
setTimeout(function() {
callback(null, 'resultOfShortTime1', 'resultOfShortTime2');
}, 200);
},
medium: function mediumTimeFunction(callback) {
setTimeout(function() {
callback(null, 'resultOfMediumTime1', 'resultOfMeiumTime2');
}, 500);
}
},
function(err, results) {
if (err) {
return console.error(err);
}
console.log(results);
});
結果:
{
short: ["resultOfShortTime1", "resultOfShortTime2"],
medium: ["resultOfMediumTime1", "resultOfMediumTime2"]
}
。