依赖瀑布的单任务

async.waterfall(tasks, afterTasksCallback) 将执行一组任务。每个任务都在另一个任务之后执行**,任务的结果将传递给下一个任务**。作为 async.series() ,如果任务失败,异步停止执行并立即调用主回调。

任务成功完成后,异步调用回调,包含所有错误和所有任务结果。

function getUserRequest(callback) {
  // We simulate the request with a timeout
  setTimeout(function() {
    var userResult = {
      name : 'Aamu'
    };

    callback(null, userResult);
  }, 500);
}

function getUserFriendsRequest(user, callback) {
  // Another request simulate with a timeout
  setTimeout(function() {
    var friendsResult = [];

    if (user.name === "Aamu"){
        friendsResult = [{
          name : 'Alice'
        }, {
          name: 'Bob'
        }];
    }
    
    callback(null, friendsResult);
  }, 500);
}

async.waterfall([
    getUserRequest,
    getUserFriendsRequest
  ],
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(JSON.stringify(results));
  });

结果: results 包含瀑布最后一个函数的第二个回调参数,在这种情况下是 friendsResult