来自docs:
以下阶段简要概述了事件循环的操作顺序。
阶段概述
- 计时器:此阶段执行由
setTimeout()
和setInterval()
。- 待处理的回调:执行推迟到的I / O回调 下一个循环迭代。
- 空闲,准备:仅在内部使用。
- 投票:检索新的I / O事件;执行与I / O相关的回调(几乎所有 除了close回调,计时器安排的回调, 和
setImmediate()
);适当时,节点将在此处阻塞。- 检查:
setImmediate()
个回调在此处被调用。- 关闭回调:一些关闭回调,例如
socket.on('close', ...)
。在事件循环的每次运行之间,Node.js会检查它是否正在等待任何异步I / O或计时器,如果没有,则将其完全关闭。
文档未阐明操作顺序是否严格。 例如,假设您处于 Check 阶段,并且有来自轮询阶段的回调。
节点会跳过其他阶段以立即进入轮询阶段吗?否则它将遍历所有阶段?