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");
    });
  };
}
相关推荐
star learning white1 分钟前
xm C语言12
服务器·c语言·前端
tabzzz1 分钟前
大道至简:万字漫谈前端性能监控
前端·javascript·性能优化
CoderCodingNo7 分钟前
【GESP】C++一级真题 luogu-B4410 [GESP202509 一级] 金字塔
开发语言·c++
0思必得09 分钟前
[Web自动化] CSS基础概念和介绍
前端·css·python·自动化·html·web自动化
小胖霞11 分钟前
全栈系列(15)github Actions自动化部署前端vue
前端·node.js·github
未来魔导11 分钟前
基于 Gin 框架的 大型 Web 项目推荐架构目录结
前端·架构·gin
小橙编码日志14 分钟前
MongoDB深入与实战:基于SQL的对照解析
后端·面试
free-elcmacom14 分钟前
Python实战项目<2>使用Graphviz绘制流程框图
开发语言·python·graphviz
ljuncong21 分钟前
python的装饰器怎么使用
开发语言·python
2501_9448755131 分钟前
Go后端工程师
开发语言·后端·golang