异步模块

值得庆幸的是,存在像 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!');
});