问题描述
在执行以下代码时,我得到的输出为:
1
4
3
未定义
2
console.log(1)
setTimeout(() => {
console.log(2)
});
Promise.resolve().then(() =>
console.log(3)
)
console.log(4)
我了解到微队列任务是在同步任务在堆栈中完成之后执行的,并且在执行微任务(承诺调用)堆栈后将为空,宏任务将占据堆栈并被执行,并且堆栈空着。如果我没错,输出将是:
1
4
3
2
我不知道为什么执行从微任务转移到宏任务时会出现未定义。
解决方法
我猜您是在 debug-tools 控制台中运行脚本。这将解释undefined
。那是因为 debug-tools 控制台将返回上一个命令的结果(在您的情况下为console.log
)。
这是代码的真正运行方式:https://codesandbox.io/s/sharp-neumann-xwbut?fontsize=14&hidenavigation=1&theme=dark