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

关于async/await中await与直接调用函数的执行差异疑问

await调用与直接调用函数的差异解析

核心差异的关键,在于doSomething()本身是同步函数还是异步函数(返回Promise),分两种情况拆解:

1. 当doSomething是同步函数时

两段代码的执行逻辑完全一致:

  • 普通foo()里的直接调用:同步代码是阻塞执行的,必须等doSomething()全部执行完毕,才会走到return "1"这一行。
  • 带async/await的foo()里的调用:await对同步函数没有“异步等待”的效果,本质还是同步阻塞,同样会等doSomething()执行完再继续。

这种场景下,两段代码都会等待doSomething()完成。

2. 当doSomething是异步函数(返回Promise)时

差异就非常明显了:

  • 普通foo()里的直接调用:调用doSomething()后,主线程会立刻跳过它的异步逻辑,直接执行return "1",完全不会等待doSomething()的异步操作完成。
  • 带async/await的foo()里的调用:await会暂停当前async函数的执行,直到doSomething()返回的Promise被resolve(也就是异步操作完成),才会继续执行return "1"。

这种场景下,只有带await的那段代码会等待doSomething()完成,普通调用不会。

总结

是否等待doSomething()完成,不能只看调用方式,更要关注doSomething()本身的类型。只有当它是异步函数时,await才会发挥“等待异步完成”的作用;如果是同步函数,两种调用方式没有本质区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:15:37