非同步模組

值得慶幸的是,存在像 Async.js 這樣的庫來試圖解決這個問題。Async 在程式碼之上新增了一層薄層函式,但可以通過避免回撥巢狀來大大降低複雜性。

Async 中存在許多可以在不同情況下使用的輔助方法,如系列,並行,瀑布等。每個函式都有一個特定的用例,因此需要花一些時間來了解哪一個在哪些情況下會有所幫助。

像 Async 一樣好,就像任何東西一樣,它並不完美。通過將系列,並行,永久等組合在一起很容易讓人感到厭煩,此時你就可以回到凌亂的程式碼開始了。小心不要過早地優化。僅僅因為一些非同步任務可以並行執行並不總是意味著他們應該這樣做。實際上,由於 Node 只是單執行緒,因此使用 Async 並行執行任務幾乎沒有效能提升。

該源可從 https://github.com/caolan/async 下載。或者,你可以使用 npm 進行安裝:

$ npm install –save async

除了使用 Bower:

$ bower 安裝非同步

Async 的瀑布示例:

var fs = require('fs');  
var async = require('async');

var myFile = '/tmp/test';

async.waterfall([  
    function(callback) {
        fs.readFile(myFile, 'utf8', callback);
    },
    function(txt, callback) {
        txt = txt + '\nAppended something!';
        fs.writeFile(myFile, txt, callback);
    }
], function (err, result) {
    if(err) return console.log(err);
    console.log('Appended text!');
});