前端 async原理

async函数是ES2017引入的新特性,用于简化异步编程。它与await配合使用,类似于generator函数,但无需手动调用next。async函数会返回一个Promise对象,await则是内部then的语法糖。async的本质是将Generator函数与自动执行器结合,通过Generator函数的next方法控制步骤执行,并在每个步骤中返回Promise。总结来说,async函数是Generator函数和自动执行器的封装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

async 原理

async 函数是 ES2017 标准引入的,其与 await 语法搭配,用来更优雅地实现异步编程。与 generator 函数作用类似。不同的是,async 不需要手动调用 next 方法,并且返回值始终是 Promise 对象。

async 函数可以看作多个异步操作,包装成的一个 Promise 对象,而 await 命令就是内部 then 命令的语法糖。
async函数就是将Generator函数的星号(*)替换成async,将 yield替换成 await,仅此而已
async 异步是由 generator 函数 + Promise 函数实现的。
就是将Generator函数和自动执行器,包装在一个函数里
async === generator + 自动执行器

//代码  此处为一个简单的自动执行器的例子
//其中 spawn 函数就是自动执行器。
function spawn (genF) {
  return new Promise(resolve => {
    const gen = genF()
    // 1 nextF = () => gen.next(undefined)
    // 2 nextF = () => gen.next(小花)
    // 3 nextF = () => gen.next(小白)
    // 4 nextF = () => gen.next(小蓝)
    function step (nextF) {
      // 1. { done: false, value: 小花 }
      // 2. { done: false, value: 小白 }
      // 3. { done: false, value: 小蓝 }
      // 4. { done: true, value:[小花 小白 小蓝]}
      let next = nextF()
			
   if (next.done) {
        return resolve(next.value)
			}
      // 1. () => gen.next(小花)
      // 2. () => gen.next(小白)
      // 3. () => gen.next(小蓝)
			step(() => gen.next(next.value))
    }
    step(() => gen.next(undefined))
  })
}

//generator
在这里插入图片描述
总结

所以async 函数原理就是 Generator函数 和 自动执行器包装了一下, generator 函数的 next 方法控制一步步执行,然后每次执行完都返回一个 Promise 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值