以前在阅读Async JavaScript Build More Responsive Apps with Less Code一书的时候,认识了Async库!开始的时候,没有体会async的魅力,直到最近用NodeJs写网站的时候,才发现,如果不用async,写出来的代码简直没法看。所以在中后期,我大量使用了Parallel和waterfull,但是写出来的代码仍旧比较凌乱,最近才发现async的一个强大的API,async.auto!我觉得,这个才是async的强大之处!
很多时候,你逻辑里面,既有waterfull的也有parallel的,那个就要写至少2个async函数调用,复杂的情况下,可能更多,但是async.auto的强大是在于,你定义好相互之间的dependencies,他来帮你决定用parallel还是waterfull。
看一个例子:
async.auto({ func1: function (callback, results) { callback(null, "abc", "bbc"); }, func2: function (callback, results) { console.log("Print#1:\n" + util.inspect(results)); callback(null, { "puncha": "during" }); }, func3: ["func2", function (callback, results) { console.log("Print#2:\n" + util.inspect(results)); callback(null, 3); }], func4: ["func1", "func3", function (callback, results) { console.log("Print#3:\n" + util.inspect(results)); callback(null); }] });
async.parallel([ func1, async.waterfall([ func2, func3 ]), ], func4)
Print#1: { func1: [ 'abc', 'bbc' ] } Print#2: { func1: [ 'abc', 'bbc' ], func2: { puncha: 'during' } } Print#3: { func1: [ 'abc', 'bbc' ], func2: { puncha: 'during' }, func3: 3 }
首先,你调用callback,传入2个result,async.auto帮你变成了一个数组,func1: ['abc', 'bbc']。
其次,func2的结果自动放入了results里面,func2: {puncha: 'during'}
这个应该能满足大部分需求了!