blog icon indicating copy to clipboard operation
blog copied to clipboard

深入理解 async/await

Open JTangming opened this issue 6 years ago • 1 comments

理解 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() 方法进行调用

JTangming avatar Nov 02 '19 14:11 JTangming

标准文档是把 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/

JTangming avatar Feb 01 '20 15:02 JTangming