首页 > 关于async和promise的选择

关于async和promise的选择

菜鸟有一个疑惑,是关于nodejs异步操作库的选择。
使用过async,也粗略使用过q.js和when.js
以上两者在使用过程中个人感觉区别不大,但哪一种方式更好一点?
哪位大神能从深层次一些解惑一下么


个人觉得async和q.js是两种不同的工具,虽然都是为了方便异步操作,但针对的方向还是不同的。

说的简单点,q.js适合需要传值的情况,或者框架中。

而async适合处理一系列按照特定顺序执行的复杂操作。


我两个都用,区分的方法为:
1. 如果问题本身是对容器或集合的异步操作,则使用 async。
2. 如果问题偏重于传统的顺序流程+异常处理,则用 q。

q 最大的好处是能够捕获异步流程中异步,使得代码的健壮性比较强。async 和underscore 等函数式编程库结合时,比较容易发挥函数式编程的优势。所以两者各有适合的领域。不过如果你同时混用 async 和 q,那么需要逻辑非常清晰才行。


从个人的使用情况来看:

Async 更倾向于对 Js 回调的优化。序列化的操作,并行的操作等都需要封装到一起去执行,统一设定一个回调。拆分逻辑非常不方便。

Promise 方式的 Q 更像是一种创新,支持常用的所有流程模型,对逻辑的分离也非常方便,不需要你去特定的封装。而且结合 NodeJs 和 Js 的回调规范,有内置的支持。而且还支持通知,延迟,性能也不错,对于 JS 做的事情来说简直就是绝配,如果你真正用懂了 Promise,你也许会欲罢不能

推荐一篇文章:Why I am switching to promises?


个人倾向promise,和CommonJS沾上边对以后多少是个好事。
promise甚至已经快要成为浏览器库的一部分了,虽然不指望它兼容性,但这组核心API本身基本上是板上钉钉的事情了。


后端 Node.js 的话, 就不用选择了, 未来是 generator 的天下 http://cnpmjs.org/package/co

【热门文章】
【热门文章】