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");
    });
  };
}
相关推荐
变与不变8062 分钟前
JS事件机制精讲
前端·javascript
装备研究社9 分钟前
Promise 的五个状态,90% 的人只说对了三个
前端
孙启超11 分钟前
【AI开发之Rust】第 8 课:泛型、trait 与 trait 对象
开发语言·后端·rust
小聪70820 分钟前
elpis-core 抽离 npm 包过程的难点和卡点
前端·架构
晚安日记wanna30 分钟前
Redis 持久化RDB 和 AOF 到底该怎么选
redis·面试·架构
2501_9336707937 分钟前
经营财务岗技能栈拆解:Excel、SQL、BI、预算分析怎么准备
开发语言
钱栈up42 分钟前
坯料管理导入功能bug修复:只改前端一个文件就解决问题
前端·bug
沉迷...44 分钟前
Git skip-worktree 使用笔记(本地忽略配置文件)
javascript·git
数据狐(Datafox)1 小时前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json
石小石Orz1 小时前
民间AI排行榜单新鲜出炉,Fable 5.1仅排第三
前端·后端·ai编程