关于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
相关产品推荐
相关产品推荐

