0

有人可以解释一下 nodejs 中 setImmediate() 函数的实时用例吗。我浏览了很多博客,但每个地方都给出了带有 setImmediate 的 console.log 示例。

4

1 回答 1

4

setImmediate()当您想推迟运行一些代码或调用一些回调,直到当前事件已被完全处理并且控制返回到事件循环之后,这很有用。

您可能想要这样做的原因有很多:

  1. 您希望其他(已经挂起的)事件在运行某些代码之前有机会得到处理。

  2. 你想调用一个回调,但你想异步调用它,以便在调用回调之前运行之后的调用者代码。nodejs 库中有一些地方这样做是为了保证始终异步调用回调,即使结果是同步已知的。这为调用者创建了编程一致性,因此有时不会同步调用回调,有时会异步调用回调,这可能会导致细微的错误。

  3. 当您试图不阻塞事件循环太久时。您可以运行一段代码,然后setImmediate()在调用回调时调用并运行下一段代码,setImmediate()依此类推。这允许在处理块之间处理到达事件循环的其他事件。

设置这篇文章以获得易于阅读的摘要setImmediate(),setTimeout()process.nextTick():

在 Node.js 中调度执行 - setTimeout、setImmediate 和 process.nextTick 之间的区别。

以下是来自 nodejs 和 Express 源代码的一些示例:

套接字:确保异步调度写入

HTTP:确保在堆栈展开之前不会删除解析器

仅在堆栈展开后,Express 才在层路由中调用回调

ExpresssendFile()在中止时调用回调回调,仅在堆栈展开后

于 2020-09-07T03:52:42.287 回答