並行多工處理

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"]
}