强大的async.auto!
来源:互联网 发布:linux 查看ip归属地 编辑:程序博客网 时间:2024/06/05 04:14
以前在阅读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.auto接受一个对象,即键值对,其每一个属性,就是一个你要执行的函数逻辑,而依赖关系通过属性名指定。上面代码的意思是,func1和func2相互独立,没有依赖,func3依赖于func2,func4依赖于func1,func3(其实也间接依赖于func2)。那么,根据人脑判断,func1和func2可以并行执行,func3可以和func1并行但是需要等待func2,func4最后执行。如果不用async.auto的话,差不多这样吧:
async.parallel([ func1, async.waterfall([ func2, func3 ]), ], func4)
相比之下,async.auto代码更加简洁,而且将来要多加一个dependency也简单。另外async.auto还有一个特色,就是每一个callback都会传入一个results参数,让你得到你每个函数执行的结果(当然,如果你执行的之后,那个函数还没执行,就不会有结果),你不用自己显式地把结果存入results对象,async.auto会帮你做这件事情。上面那段代码执行的结果是:
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'}
这个应该能满足大部分需求了!
- 强大的async.auto!
- 强大的 GNU AUTO MAKE工具集
- nodejs.async中流程控制auto,autoInject,cargo的用法
- c++11使用 async异步函数并传递参数以及auto的使用方法
- emacs下C/C++自动补全,Yasnippet && auto-complete && auto-complete-clang-async
- XMLDOM 的async属性
- jquery ajax的async
- Async 的简单使用
- Async包的使用
- activiti:async的作用
- android async的使用
- jquery的$.ajax async
- Ajax的async
- ajax 的 async属性
- async-http 的封装
- async的使用
- async-validator的使用说明
- async的用法
- Hash Sum mismatch and apt-get
- CURLOPT_HTTPPROXYTUNNEL参数的意义
- poj 2785 4 Values whose Sum is 0(hash)
- MySQL数据库调优之四
- VC++ MFC橡皮筋技术
- 强大的async.auto!
- C/C++中如何嵌入汇编
- 快排中注意的小细节
- ruby 的多态
- 音视频应用技术(即时通讯)
- Spring简介
- Ubuntu12.04歌词显示osd-lyrics 和 解决播放器乱码
- python日志输出—logging直接代码配置
- SDC中添加一个对话框到主视图