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

发布于 2022-09-12 22:48:58 字数 107 浏览 13 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

﹎☆浅夏丿初晴 2022-09-19 22:48:58
  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会被添加到微任务队列……

逆光飞翔i 2022-09-19 22:48:58

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

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

function sleep (milliSecond) {
  return new Promise(resolve => setTimeout(resolve, milliSecond))
}
音盲 2022-09-19 22:48:58

async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文