js异步流程控制库


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

node.js 回调函数 JavaScript 异步io

小样啊丫的 10 years, 8 months ago

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

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

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

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

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

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

想想 promise 的涵义。

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

Eliotte answered 10 years, 8 months ago

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

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

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

goddnes answered 10 years, 8 months ago

Your Answer