在官方網站中,是這樣介紹的,這是一個用來處理異步js的工具包。它提供了一些直觀的,功能強大的函數。盡管它最初是為node.js來設計的,它也可以直接用在browser中。
先來看一段代碼(需要在nodejs中運行):

var fs = require('fs'); var async = require('async'); process.chdir('testAsync'); var concatenation = ''; var dirContents = fs.readdirSync('.'); async.filter(dirContents, isFilename, function(filenames){ async.forEachSeries(filenames, readAndContent, onComplete); }); function isFilename(filename, callback){ fs.stat(filename, function(err, stats){ if(err) throw err; callback(stats.isFile()); }); } function readAndContent(filename, callback){ fs.readFile(filename, 'utf8', function(err, fileContents){ if(err) return callback(err); concatenation += fileContents; callback(); }); } function onComplete(err) { if(err) throw err; console.log(concatenation); }
上述的代碼需要在當前路徑下新那一個foler,命名為testAsync, 並在其中建立幾個文本文件,這樣我們在nodejs testAsync.js,將會在命令行下,顯示這幾個文件的內容。
現在讓我們來分析一下我們用到了幾個函數:
filter, forEach這是async所提供的眾多函數中的其中一個,這兩個函數和jQuery中的filter,each幾乎起到了相同的作用。另外,還有下列的函數:
reject/rejectSeries, 和filter是相反的用法。
map/mapSeries, 1:1的轉換,最后返回轉化后的數組。
reduce/reduceRight,對於每一項進行處理,上一個處理結果轉入下一個新項中
detect/dectectSeries,找出一項
sortBy, some, every
上述只是Async提供的最核心的代碼應用之一,我們來看一下它是如何來控制我們流程的:
流程控制:
如果我們用js來實現一個順序執行的函數,就應該如下所示:
funcs[0](function(){
funcs[1](function(){
funcs[2](onComplete);
});
});
看看Async是如何來實現的:

var async = require('async'); var start = new Date; async.series([ function(callback){setTimeout(callback,100);}, function(callback){setTimeout(callback,300);}, function(callback){setTimeout(callback,200);} ],function(err,results){ console.log('Completed in'+(new Date - start) +'ms'); });
上述結果大概是600ms左右,因為它們是順序執行的。如果我們把async.series/async.waterfall改為async.parallel時間就會變為300ms左右。
上述兩個函數在流程控制方面其實是有很多限制的:
1. 我們無法動態的改變我們的task array.
2.無法查詢已經完成了多少功能。
所以async還提供了另外一個函數:async.queue
它會接收兩個參數,一個是worker, 另一個是同時能處理的任務的個數:

var async = require('async'); function worker(data, callback){ console.log(data); callback(); } var concurrency = 2; var queue = async.queue(worker, concurrency); queue.push(1); queue.push(2); queue.push(3);
參考資料:
Async Javascript Build More Responsive Apps with less code
https://github.com/caolan/async