js异步流程控制库


刚开始写js(node)最怕就是写回调
常常会变成回调地狱
然后就开始使用一些异步流程控制库
async ,还有国内的 then.js (恕我懒惰至今没想去尝试使用 promise )
我就还只是处于 使用 这些库
还没去到 读懂源码 清楚原理 的程度
那么问题来了
我使用这些库主要是回避回调地狱同时也是同步的逻辑写代码
但实际上真的是 同步 吗?
如果这些库实现的是把 异步非阻塞 变成 同步阻塞 的话
像node的所谓优势(异步io)不就全没有了吗?
望指教!

node.js 回调函数 JavaScript 异步io

小样啊丫的 10 years, 10 months ago

当然不是阻塞,本质上就是内部用各种数据结构帮你管理回调而已

promise的厉害之处就在于只用了一个api接口同时解决回调地狱和异步异常流程控制,还能轻松处理异步和同步流程混杂,说是JS语言内部缺少的一部分也不为过(实际上已经出现了原生Promise)

node的话我个人用的实现是bluebird,前端的话,jQuery的实现虽然有些问题但还是能用的

async.js则不同,更偏向于将每种常见的异步流程分别提供一个api来解决,错误处理和复杂异步逻辑的适应差promise一个档次,涉及其覆盖的常见异步流程的业务代码写起来比纯promise好看(其实promise的很多实现也开始学习async提供常见流程的简单封装)。而由于其本质上还是以回调为核心,一旦逻辑复杂起来,async.js的业务代码基本上还是迅速复杂、崩溃的命。

至于then.js,我只能说这个项目在设计上犯了一些根本性错误,而且不是严格意义上的开源项目,价值不大

火星後繼者 answered 10 years, 10 months ago

想想 promise 的涵义。

就是在同步流程中使用异步以提高效率。
特别是 async 就是出于这样的目的:在不牺牲可读性的前提下,尽可能多的使用异步到代码。

Eliotte answered 10 years, 10 months ago

我现在也只是算个node入门,控制流程的源码也只看过 step.js

所以,一些非常深的东西,我没有发言权;但我可以举一个简单例子:

当你要异步并行做4件事的时候,其实你在做5件事

goddnes answered 10 years, 10 months ago

Your Answer