如果您多次拨打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
?
答案 0 :(得分:2)
docs中没有写入使用什么类型的队列,我找不到解释它的官方来源,所以我看了source code它似乎是你指出的一个FIFO队列。
检查每个nextTickQueue
后回调如何被推送到nextTick()
数组,以及如何在_tickCallback()
中按顺序执行它们,在每个回复中增加索引tickInfo[kIndex]
迭代循环。
我认为在你的例子中,第三个和第四个回调不会在第一个和第二个回调的队列中同时出现;但无论如何他们都会按顺序执行。
顺便说一句,即使按照预期的方式执行FIFO执行顺序,这也是一种无证的行为,因此不建议依赖它;内部的东西可以随时改变。