setTimeout(() => { console.log(1) Promise.resolve(3).then(data => console.log(data));}, 0)setTimeout(() => { console.log(2)}, 0)我们知道setTimeout的的回调在timer阶段执行,然后2个setTimeout 都会被注册到timer阶段eventloop 检查timer时候,有2个setTimeout 然后执行,并且第一个setTimeout中的 promise.resolve() 在注册到microTask中,在timer 阶段结束 执行microTask.但是这个代码执行会出现 1 2 3 和 1 3 2 的结果所以有点不理解为什么会有这两种不同的结果。
1 回答

动漫人物
TA贡献1815条经验 获得超10个赞
Note: When delay is larger than 2147483647 or less than 1, the delay will be set to 1.
timers_settimeout_callback_delay_args
这取决于timer
阶段会不会认为第2个timer
超时。
然后你可以改成
setTimeout(() => {
console.log(1)
Promise.resolve(3).then(data => console.log(data));
}, 0)
setTimeout(() => {
console.log(2)
}, 0)
let d = Date.now();
while (!(Date.now() - d > 1)) {
}
添加回答
举报
0/150
提交
取消