async.js 學習記錄

async.js 主要解決 node異步函數的流程控制。node

經常使用的場景以下:

1. 多個異步依次順序執行。若是有異常拋出時就當即執行回調函數, 回調函數的err爲拋出的異常;若是沒有異常拋出,當全部異步函數完成後,執行成功回調函數,err值爲null, result 爲異步數組的結果數組git

async.series([
  function(callback) {
    doAsync1(arg, callback);
  },   
  function(callback) {
    doAsync2(arg, callback);
  },
  function(callback) {
    doAsync3(arg, callback);
  }
], function(err, result) {
  console.log(result);
});

在線demo: http://jsbin.com/sisasu/edit?js,console,outputgithub

2.多個異步依次順序執行,且後面異步函數的依賴前面異步函數的輸出c#

async.waterfall([
  function(callback) {
    doAsync1(2, callback);
  },
  function(arg, callback) {
    doAsync2(arg, callback);
  },
  function(arg, callback) {
    doAsync3(arg, callback);
  }
], function(err, result) {
  console.log(result);
});

在線demo: http://jsbin.com/yozuje/edit?js,console,outputsegmentfault

3.多個異步並行執行,當全部異步函數執行完成後執行回調函數,回到函數的參數爲以前異步函數執行結果的數組,若是須要限制並行執行的數量能夠使用parallelLimit 數組

async.parallel([
  function(callback) {
    doAsync1(arg, callback);
  },   
  function(callback) {
    doAsync2(arg, callback);
  },
  function(callback) {
    doAsync3(arg, callback);
  }
], function(err, result) {
  console.log(result);
});

在線demo: http://jsbin.com/mugixu/edit?js,console,output異步

數組相關

async.each(arr, doAsync, function(err, result){
  console.log(result);
});
// 等同於
async.each(arr, function(item, callback){
  doAsync(item, callback);
}, function(err, result){
  console.log(result);
});

在線demo: http://jsbin.com/supuko/edit?js,console,outputasync

綜合例子

http://segmentfault.com/n/1330000004401616函數

參考

  1. https://github.com/caolan/async#seriestasks-callbackcode

相關文章
相關標籤/搜索