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");
    });
  };
}
相关推荐
NAGNIP22 分钟前
一文搞懂CNN经典架构-DenseNet!
算法·面试
sunny_26 分钟前
💥 Claude Code 源码泄露?我把这个最强 AI Coding Agent 的架构扒干净了
前端·agent·claude
花间相见27 分钟前
【MySQL面试题】—— MySQL面试高频问题汇总:从原理到实战,覆盖90%考点
数据库·mysql·面试
Lyyaoo.28 分钟前
【JAVA基础面经】抽象类/方法与接口
java·开发语言
西洼工作室30 分钟前
React轮播图优化:通过延迟 + 动画的组合,彻底消除视觉上的闪烁感
前端·react.js·前端框架
0xDevNull32 分钟前
Java实现Redis延迟队列:从原理到高可用架构
java·开发语言·后端
糖炒栗子032633 分钟前
Go 语言环境搭建与版本管理指南 (2026)
开发语言·后端·golang
于先生吖36 分钟前
无人共享健身房 Java 后端源码 + 多端对接完整方案
java·开发语言
yaaakaaang40 分钟前
(八)前端,如此简单!---五组结构
前端·javascript
我是若尘44 分钟前
我的需求代码被主干 revert 了,接下来我该怎么操作?
前端·后端·代码规范