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 顺序,这也是一种未记录的行为,因此不建议依赖它;内部的东西可以随时更改。
多次调用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 顺序,这也是一种未记录的行为,因此不建议依赖它;内部的东西可以随时更改。