You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中async/await执行疑问:console.log('end')为何不执行两次?

async/await代码执行逻辑说明

先拆解这段代码的执行顺序:

  • 首先运行最外层的同步代码,console.log('start') 输出 start。
  • 调用 withoutAwait():这是async函数,但内部没有await,所以函数体全程同步执行,直接输出 without await,之后函数返回一个已完成状态的Promise,但这个Promise不会干扰后续同步代码的执行。
  • 调用 withAwait():进入函数后碰到 await 0,此时JS会把await之后的代码(也就是console.log('with await'))放进微任务队列,然后暂停当前函数,主线程回到同步代码继续执行。
  • 执行 console.log('end'),输出 end——这行代码在同步流程里只写了一次,所以只会执行一次。
  • 等主线程所有同步代码都跑完,才会处理微任务队列里的任务,这时候才会执行withAwait()里剩下的console.log('with await'),输出 with await。

你觉得end会执行两次,是对async/await的机制有误解:它只是用来安排异步代码的执行时机,不会让同步代码重复执行。console.log('end')在代码里仅出现一次,自然只会被调用一次。

内容的提问来源于stack exchange,提问作者Michael36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:45:34