blog
blog copied to clipboard
深入理解 async/await
理解 async/await
可以直接参考:理解 async/await
ES7 提出的 async 函数,终于让 JavaScript 对于异步操作有了终极解决方案(No more callback hell
Async 函数的改进在于下面四点:
- 内置执行器 Generator 函数的执行必须依靠执行器,而 Aysnc 函数自带执行器,更直观的同步写法
- 更好的语义 async 和 await 相较于 * 和 yield 更加语义化
- 更广的适用性 async 函数的 await 命令后面则可以是 Promise 或者基本类型的值(Number,string,boolean...)
- 返回值是 Promise async 函数返回值是 Promise 对象,可以直接使用 then() 方法进行调用
标准文档是把 async/await 作为一个 promise 语法糖,用 promise 封装的 generator 自动执行函数。
v8 按照标准文档,底层是用 promise 实现了async/await。
babel 是把 async/await 转换为 generators 和 promises,再通过 regenerator-runtime 把 generator 转换为 ES5 代码。
Reference
- https://juejin.im/post/5c394da4518825253661bd4d
- https://www.zhihu.com/question/39571954/answer/82042148
- https://hackernoon.com/async-await-generators-promises-51f1a6ceede2
- https://v8.dev/blog/fast-async
- https://v8.js.cn/blog/fast-async/