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 的结果
所以有点不理解为什么会有这两种不同的结果。
timers_settimeout_callback_delay_args
这取决于
timer
阶段会不会认为第2个timer
超时。然后你可以改成