Skip to content

Latest commit

 

History

History
62 lines (40 loc) · 2.56 KB

process.nextTick() 在 Node.js 中是如何工作的?.md

File metadata and controls

62 lines (40 loc) · 2.56 KB

process.nextTick() 在 Node.js 中是如何工作的?

当您试图理解 Node.js 事件循环时,其中一个重要部分是 process.nextTick()

Tipsprocess 对象是 Node.js 核心 API 提供的少数全局对象之一。它可以从任何地方访问,因此它的方法也可以访问。

在 Node.js 中,每次事件循环执行一次完整的过程,我们称之为 tick

当我们将函数传递给 process.nextTick() 时,我们指示引擎在当前操作结束时,在下一个事件循环 tick 开始之前调用此函数:

process.nextTick(() => {
  // do something ...
})

事件循环正忙于处理当前功能代码。

当此操作结束时,JS 引擎运行该操作期间传递给 nextTick 调用的所有函数。

我们可以通过这种方式告诉 JS 引擎异步处理函数(在当前函数之后),但要尽可能快,而不是让它排队。

这里我们讲一下,浏览器的 setTimeout() 函数,它用于在不久的将来执行延迟任务。

setTimeout(() => {
  // do something ...
}, 0)

推荐:详细用法请看 JavaScript 中的 setTimeout 和 setInterval 方法

先来看一个 🌰:

process.nextTick(() => {
  console.log('nextTick')
})

console.log('log')

setTimeout(() => {
  console.log('setTimeout')
})

// log
// nextTick
// setTimeout

从上面的代码片段可以看出,nextTicksetTimeout 之前先被打印。

setTimeout()process.nextTick() 之间的区别在于 process.nextTick() 函数特定于 Node.js 事件循环。

调用 setTimeout() 将在下一个 tick 结束时执行函数,这比使用 nextTick() 时要晚得多,后者将优先处理调用并在下一 tick 开始前执行。

所以,如果要确保在下一次事件循环迭代中代码已经执行,请使用 nextTick()

更多资料