依賴瀑布的單任務

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