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

JS异步执行疑问:为何Paris未在10秒后打印?

问题解答

为什么没有在10秒后打印"Paris"?

因为p2的定时器不是等到执行到await p2才启动的,它在程序一开始就已经开始计时了。当await p1等待5秒后打印"Rome"时,p2的定时器已经跑了5秒,剩下的5秒走完就会触发resolve,所以从"Rome"到"Paris"只间隔5秒,而从程序启动到"Paris"总共是10秒。

p2的setTimeout计时器是否在代码执行到await p2之前就已启动?

是的,完全正确。JavaScript中Promise的构造函数是同步执行的——当你写const p2 = new Promise(...)这行代码时,括号里的回调函数会立刻被调用,里面的setTimeout随即被触发,计时器直接开始计时,和后面async函数里的await执行时机毫无关系。

遇到await p1时,he()函数暂停执行,此时后台是否已开始处理p2的相关逻辑?

早就开始了。p2的初始化和定时器启动是在整个程序最开始的同步执行阶段完成的,和he()函数调用属于同一阶段的同步操作。当he()在await p1处暂停时,p2的定时器已经在浏览器/Node的后台定时器队列中运行了5秒,后续只需要等剩余时间走完,就会触发resolve。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:19