async/await为什么是异步操作呢?

同步不应该是执行这一段才往下执行
await是等待的意思,等待后面执行完成再执行下一段
那这不应该是同步么?我看很多技术文章都说async/await是异步操作
why~~有点不理解

阅读 8.7k
4 个回答
  const asyncFunc = async () => {
    await 1
    console.log(1)
  }
  console.log(asyncFunc())
  console.log(2)

打印顺序会是 Promise<>21,这说明只有 console.log(1) 会因等待 await 1而延期,外面的console.log(2)则是直接执行的,如果是同步的话理应先 1 后 2。
奥秘就在 asyncFunc 自动返回的这个 Promise 里:被迫“延期执行”的代码其实被装进了这个 Promiseresolver 里了,而Promiseresolver会被添加到微任务队列……

只是在当前async函数体内,将异步操做模拟成了同步操做,并不影响与它并行的代码的执行。实际上await还是一个回调函数语法糖

//  => 马上执行
// => 我两秒后执行了
;(async function () {
  await sleep(2000)
  console.log('我两秒后执行了')
})()
console.log('马上执行')

function sleep (milliSecond) {
  return new Promise(resolve => setTimeout(resolve, milliSecond))
}
async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。

async/await 其实就是把 await之后的函数变成了一个 promise,只不过是把 promise 的链式调用写法改成了看起来像同步的写法,就不需要每次都 .then 一直点下去了,增加可读性。

其实就是 Generator + Promise 的语法糖。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题