开发者社区> 问答> 正文

async/await 实现原理

async/await 实现原理

展开
收起
问答小能手! 2021-02-05 19:19:15 4296 0
1 条回答
写回答
取消 提交回答
  • 来自昆仑山,真名陆离。

    async/await 就是 Generator 的语法糖,使得异步操作变得更加方便。async 函数就是将 Generator 函数的星号(*)替换成 async,将 yield 替换成await。 不一样的是:

    1.async函数内置执行器,函数调用之后,会自动执行,输出最后结果。而Generator需要调用next。
    2.返回值是Promise,async函数的返回值是 Promise 对象,Generator的返回值是 Iterator(迭代器),Promise 对象使用起来更加方便。
    简单实习代码

    function asyncToGenerator(generatorFunc) {
      return function() {
        // 先调用generator函数 生成迭代器
        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 resolve(value)
            } else {
              return Promise.resolve(
                value
              ).then(
                function onResolve(val) {
                  step("next", val)
                },
                function onReject(err) {
                  step("throw", err)
                },
              )
            }
          }
          step("next")
        })
      }
    }
    
    
    2021-02-05 19:20:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载