process.nextTick 的回调是否按顺序调用?

Are callbacks of process.nextTick invoked in order?

多次调用process.nextTick(),回调是否按顺序执行?

换句话说,Node事件循环是否对所有对process.nextTick的调用给予相同的优先级,并以先进先出的顺序执行它们?

例如:

process.nextTick(() => console.log('1'))
process.nextTick(() => console.log('2'))

process.nextTick(() =>
  process.nextTick(() => console.log('3'))
)

process.nextTick(() =>
  process.nextTick(() => console.log('4'))
)

这个总是打印1 2 3 4吗?

docs, and I could not find an official source that explains it, so I took a look to the source code中没有写使用什么类型的队列,好像是你指出的FIFO队列。

检查如何在每个 nextTick() 之后将回调推入 nextTickQueue 数组,以及如何在 _tickCallback() 中按顺序执行回调,递增索引 tickInfo[kIndex]在 while 循环的每次迭代中。

我认为在您的示例中,第三个和第四个回调不会与第一个和第二个同时在队列中;但无论如何它们都会按照那个顺序执行。

顺便说一句,即使按照预期的方式执行 FIFO 顺序,这也是一种未记录的行为,因此不建议依赖它;内部的东西可以随时更改。