在 Poll 阶段调度时,setImmediate 的回调如何在 setTimeout() 之前执行?

问题描述 投票:0回答:1

这些引用自 Nodejs 文档和博客。

如果立即计时器从正在执行的回调内部排队,则该计时器在下一次事件循环迭代之前不会被触发。

如果在 I/O 周期内调度,setImmediate() 将始终在任何计时器之前执行,与存在多少个计时器无关。

根据 Node 文档,setImmediate() 的回调应该在下一个tick中执行。然而,当它被安排在 I/O(又名 poll 阶段)时,setImmediate 的回调总是在定时器之前触发。

fs.readFile('xx', () => {
  setTimeout(() => { console.log('2 timeout'); }, 0);
  setImmediate(() => { console.log('1 Immediate'); });
});
> 1 Immediate
> 2 timeout

我的问题是它到底是如何工作的? setImmediate() 的回调是否在当前票证而不是下一个报价中执行,因此它会在计时器之前记录?

注意:我已阅读所有建议的现有帖子,但我没有看到任何帖子讨论在 I/O 阶段安排 setImmediate 的特定用例。

javascript node.js lifecycle setimmediate
1个回答
0
投票

setImmediate()
回调在当前事件循环迭代中排队,而 setTimeout() 回调在下一个事件循环迭代中排队。这就是为什么 setImmediate() 回调在 setTimeout() 回调之前执行。

阅读更多详细信息此处。请参阅标题为 setImmediate() 与 setTimeout() 的部分。

© www.soinside.com 2019 - 2024. All rights reserved.