刚开始写js(node)最怕就是写回调常常会变成回调地狱然后就开始使用一些异步流程控制库像async,还有国内的then.js(恕我懒惰至今没想去尝试使用promise)我就还只是处于使用这些库还没去到读懂源码和清楚原理的程度那么问题来了我使用这些库主要是回避回调地狱同时也是同步的逻辑写代码但实际上真的是同步吗?如果这些库实现的是把异步非阻塞变成同步阻塞的话像node的所谓优势(异步io)不就全没有了吗?望指教!
2 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
当然不是阻塞,本质上就是内部用各种数据结构帮你管理回调而已promise的厉害之处就在于只用了一个api接口同时解决回调地狱和异步异常流程控制,还能轻松处理异步和同步流程混杂,说是JS语言内部缺少的一部分也不为过(实际上已经出现了原生Promise)node的话我个人用的实现是bluebird,前端的话,jQuery的实现虽然有些问题但还是能用的async.js则不同,更偏向于将每种常见的异步流程分别提供一个api来解决,错误处理和复杂异步逻辑的适应差promise一个档次,涉及其覆盖的常见异步流程的业务代码写起来比纯promise好看(其实promise的很多实现也开始学习async提供常见流程的简单封装)。而由于其本质上还是以回调为核心,一旦逻辑复杂起来,async.js的业务代码基本上还是迅速复杂、崩溃的命。至于then.js,我只能说这个项目在设计上犯了一些根本性错误,而且不是严格意义上的开源项目,价值不大
蓝山帝景
TA贡献1843条经验 获得超7个赞
我现在也只是算个node入门,控制流程的源码也只看过step.js所以,一些非常深的东西,我没有发言权;但我可以举一个简单例子:当你要异步并行做4件事的时候,其实你在做5件事
添加回答
举报
0/150
提交
取消