并行多任务处理

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