-
我在 JavaScript 里用 setTimeout 0 想让一段逻辑稍后立即执行来排个时序,结果它总是排在所有 Promise 回调的后面执行,输出顺序跟我写的顺序完全对不上,因为微任务永远先于宏任务的深度复盘
我有段逻辑想让它在当前同步代码跑完后尽快执行,用了 setTimeout(fn, 0),以为 0 毫秒就是马上、最先执行。可代码里同时还有 Promise.then 回调,运行结果让我懵了:setTimeout(0) 总是排在所有 Promise.then 回调的后面执行,日志顺序和书写顺序完全对不上,靠它排的时序也错乱。复盘才搞懂:JS 单线程靠事件循环调度异步,异步分宏任务(setTimeou…- 0
- 0
-
我写的 JS 里 setTimeout、Promise 和同步代码混在一起,打印顺序完全不按我写的来,Promise 居然比 setTimeout 先跑,我对着事件循环排查了大半天的复盘
我写了段混着同步代码、setTimeout、Promise.then 的逻辑,以为按从上到下书写顺序执行,结果打印顺序大跌眼镜:同步代码先全跑完,写在后面的 Promise.then 竟比写在前面、延迟为0的 setTimeout 先执行,依赖顺序的逻辑全乱了。深挖才懂是 JS 的事件循环:JS 单线程,执行规则是同步代码先跑完→清空整个微任务队列(Promise.then/await后/queu…- 0
- 0
宏任务
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!


