理解 process.nextTick()
在理解 Node.js 事件循环时,process.nextTick()
是其中一个重要组成部分。事件循环每次完整运行一次,我们称之为一个 tick。
当我们将一个函数传递给 process.nextTick()
时,我们指示引擎在当前操作结束、下一个事件循环 tick 开始之前调用此函数:
js
process.nextTick(() => {
// 执行某些操作
})
事件循环正忙于处理当前函数代码。当此操作结束时,JS 引擎会运行在该操作期间传递给 nextTick
调用的所有函数。
这是我们告诉 JS 引擎异步处理一个函数(在当前函数之后)但尽快执行,而不是将其排队的方式。
调用 setTimeout(() => {}, 0)
将在下一个 tick 结束时执行函数,比使用 nextTick()
晚得多,nextTick()
优先处理调用并在下一个 tick 开始之前立即执行它。
当您想确保在下一个事件循环迭代中已执行代码时,请使用 nextTick()
。
事件顺序示例:
js
console.log('Hello => number 1')
setImmediate(() => {
console.log('Running before the timeout => number 3')
})
setTimeout(() => {
console.log('The timeout running last => number 4')
}, 0)
process.nextTick(() => {
console.log('Running at next tick => number 2')
})
示例输出:
bash
Hello => number 1
Running at next tick => number 2
Running before the timeout => number 3
The timeout running last => number 4
实际输出可能因运行而异。