在事件循环中有:
据我了解,微任务队列在事件循环的每个阶段之后运行。
事件循环的第一阶段是“计时器”阶段。请参阅此处:https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810
因此给出这段代码:
setTimeout(() => console.log('TIMEOUT'));
Promise.resolve().then(() => console.log('PROMISE');
我希望读取日志
TIMEOUT
PROMISE
但是你会得到
PROMISE
TIMEOUT
我知道“PROMISE”日志来自微任务队列中的回调。但定时器阶段是第一阶段。如果在每个阶段我们首先运行回调队列,然后运行微任务队列,为什么我在微任务队列中的日志之后看到计时器日志?
因为您的代码是从任务运行的,并且在这个初始任务之后,已经有一个微任务检查点,就像每个任务之后一样。
图中不是很清楚,但即使你有 33 个计时器回调在同一阶段触发,它们都会清空
nextTick
队列和微任务队列,所以会有大约 33 个这样的检查点。