了解 setImmediate()

Node.js setImmediate 函数以一种特殊的方式与事件循环交互。

当你想异步执行一段代码,但尽可能快地执行时,一个选择是使用 Node.js 提供的 setImmediate() 函数:

作为 setImmediate() 参数传递的任何函数都是在事件循环的下一次迭代中执行的回调。

setImmediate()setTimeout(() => {}, 0)(传递 0 毫秒超时)以及 process.nextTick()Promise.then() 有何不同?

在当前操作结束后,传递给 process.nextTick() 的函数将在事件循环的当前迭代中执行。 这意味着它将始终在 setTimeoutsetImmediate 之前执行。

延迟为 0 毫秒的 setTimeout() 回调与 setImmediate() 非常相似。 执行顺序将取决于各种因素,但它们都将在事件循环的下一次迭代中运行。

process.nextTick 回调添加到 process.nextTick queuePromise.then() 回调添加到 promises microtask queuemacrotask queue 添加了 setTimeoutsetImmediate 回调。

事件循环先执行 process.nextTick queue 中的任务,然后执行 promises microtask queue,再执行 macrotask queue

以下是显示 setImmediate()process.nextTick()Promise.then() 之间顺序的示例:

此代码将首先调用 start(),然后在 process.nextTick queue 中调用 foo()。 之后,它将处理 promises microtask queue,它打印 bar,同时在 process.nextTick queue 中添加 zoo()。 然后它将调用刚刚添加的 zoo()。 最后调用了 macrotask queue 中的 baz()

Node.js 中文网 - 粤ICP备13048890号