await async 如何实现 (阿里)

await async 如何实现 (阿里)

async 函数只是 promise 的语法糖,它的底层实际使用的是 generator,而 generator 又是基于 promise 的。实际上,在 babel 编译 async 函数的时候,也会转化成 generator 函数,并使用自动执行器来执行它。

实现代码示例:

js 复制代码
function asyncToGenerator(generatorFunc) {
  return function () {
    const gen = generatorFunc.apply(this, arguments);
    return new Promise((resolve, reject) => {
      function step(key, arg) {
        let generatorResult;
        try {
          generatorResult = gen[key](arg);
        } catch (error) {
          return reject(error);
        }
        const { value, done } = generatorResult;
        if (done) {
          return reject(error);
        } else {
          return Promise.resolve(value).then(
            (val) => step("next", val),
            (err) => step("throw", err)
          );
        }
      }
      step("next");
    });
  };
}
相关推荐
玲小珑几秒前
LangChain.js 完全开发手册(一)AI 应用开发入门
前端·langchain·ai编程
excel1 分钟前
前端必修:从表单基础到富文本编辑,一文吃透 HTML 表单编程与交互
前端
袁煦丞3 分钟前
JuiceSSH你的口袋里的Linux操控台:cpolar内网穿透实验室第530个成功挑战
前端·程序员·远程工作
鹏多多7 分钟前
深入解析vue的transition过渡动画使用和优化
前端·javascript·vue.js
程序员小续19 分钟前
React 源码解读流程:从入口到渲染的全链路揭秘
前端·javascript·面试
江城开朗的豌豆23 分钟前
React key的隐藏技能:key改变时究竟发生了什么?
前端·javascript·react.js
JarvanMo31 分钟前
我用 Ktor 替换了 Retrofit-我的网络代码减少了一半
前端
江湖十年32 分钟前
Go 1.25 终于迎来了容器感知 GOMAXPROCS
后端·面试·go
Cyclic100132 分钟前
IOS购买订阅通知信息解析说明Java
java·开发语言·ios
excel36 分钟前
WebGL 入门到进阶全解析:从 Canvas 上下文到 3D 绘制与 WebGL2 新特性
前端