有没有把 Promise, Generator, 和 async/await 之间的关系讲解得比较清楚条理的文章或者博客?
如果,正在学习前端开发。对这几块有点迷糊。
感觉好像是 先有 Promise, 再有 generator,然后现在又有了 async/await
好像越来越“先进”和“简单”。
有没有对这三者的理解 /解析比较好的文章或者博客,想理解得更深入一些?
谢谢!
如果,正在学习前端开发。对这几块有点迷糊。
感觉好像是 先有 Promise, 再有 generator,然后现在又有了 async/await
好像越来越“先进”和“简单”。
有没有对这三者的理解 /解析比较好的文章或者博客,想理解得更深入一些?
谢谢!
然后有了 generator,generator 的创举在于允许一个函数执行到一半挂起,等异步回调后继续执行,完美的解决了 promise 带来的副作用。
而 async/await 本质上是 generator 在特殊场景下使用时的一个语法糖而已,省得你去依赖 co 模块了。
至于文章手头还真没有,毕竟也是很老的东西了……
现代 JavaScript 教程 – https://zh.javascript.info/
是我之前看的, 感觉有点其他语言基础, 理解起来应该不费劲, 至于更深入… 得看想多深了
而 promise 到 generator 虽然也能通过 regenerator 的方式来实现,但是缺少作用域保持和异步挂起。
只能通过套一个函数保持作用域,然后多次调用同一个方法,通过 switch case 方式来分片执行。而你的原始代码也被编译得面目全非。是个非常不优雅的 hack 手段。远不如原生的 generator 好。
学习路径是
1. 彻底了解 Promise 的工作逻辑,注意工作逻辑不是实现细节
http://liubin.org/promises-book/
2. async/await 完全当成 Promise 的语法糖
async 就是在包装 Promise,await 就是解开 Promise
1:作用域分裂,比如 fun3 中请求的得到的结果在 fun4 要使用,但是直接在 fun3 和 4 的作用域不是同一个。所以直接在 fun3 中定义变量无效,必须把变量声明提前到 fun1 执行之前。
2:流程控制困难,比如 fun2 中请求结果显示流程不能继续执行,需要退出。
这时候没法跳过 345 的执行,要么 fun2 通过变量或返回值来通知,在 345 的开头分别判断一下标志,有标志就直接退出。
或者直接抛异常来跳过后面的步骤,但这样一样,业务流程就和真正的异常混在了一起,给异常治理带来了麻烦。
最后用皮肉面色写出来一坨屎山,太绝望了,过去这么多年,我都再也没碰到过这大的屎山了
我觉得这个问题很值得花点时间研究一下。
如果你有空的话,可能分享给我们大家。(别忘记了 @我一下)
整体的话估计开发难度不到原来的一半,代码量下降不多但是可读性大幅提升。