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");
    });
  };
}
相关推荐
wjs20242 分钟前
NumPy 位运算
开发语言
米兰小铁匠174 分钟前
js深入之从原型到原型链
javascript·面试
ZHE|张恒13 分钟前
设计模式(二)工厂方法模式 — 把创建权限下放给子类,像“可扩展的生产线”
java·开发语言·设计模式
Smile_Gently14 分钟前
Vue 2 前端项目实现 在线IDE 功能
javascript
梦鱼15 分钟前
element-ui:el-autocomplete实现滚动触底翻页
前端
阿伟实验室19 分钟前
debian10部署简易web服务器
运维·服务器·前端
报错小能手22 分钟前
C++笔记 bind函数模板
开发语言·c++·笔记
云枫晖27 分钟前
Vue3 响应式原理:从零实现 Reactive
前端·vue.js
月弦笙音27 分钟前
【AI】👉提示词入门基础篇指南
前端·后端·aigc
konh33 分钟前
React Native 自定义字体导致 Text / TextInput 文本垂直不居中的终极解决方案
前端·react native