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

时间:2017-01-13 00:38:11

标签: node.js event-loop

如果您多次拨打process.nextTick(),是否按顺序执行回调?

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

例如:

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

1 个答案:

答案 0 :(得分:2)

docs中没有写入使用什么类型的队列,我找不到解释它的官方来源,所以我看了source code它似乎是你指出的一个FIFO队列。

检查每个nextTickQueue后回调如何被推送到nextTick()数组,以及如何在_tickCallback()中按顺序执行它们,在每个回复中增加索引tickInfo[kIndex]迭代循环。

我认为在你的例子中,第三个和第四个回调不会在第一个和第二个回调的队列中同时出现;但无论如何他们都会按顺序执行。

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