非阻塞 setTimeout

Non-blocking setTimeout

是否可以在 NodeJS 中实现一个 setTimeout 版本,在最后一行代码完成后不会阻止进程退出?

即如果进程仍然是 运行.

,则只会触发回调函数的条件 setTimeout

实际例子:

当实现一个通过设置一些超时来初始化自身的库时,您会希望应用程序完成后,您不需要显式调用该库来清除所有超时,并让应用程序无论如何都会关闭。

如果您查看 setTimeout 的文档,您会注意到它 return 是一个 timeoutObject,可用于通过 clearTimeout(obj).

取消超时

所以你可以做的是通过存储它们的 id 对象来跟踪你创建的所有超时。然后你可以随时结束所有超时。


如果你只想退出进程,忽略其他一切,你可以只使用process.exit()(如果你想return一个非零错误代码,则传递一个参数)。

如果您想维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,您可以使用 clearTimeout,但在节点中使用 unref() 更容易Node doc on unref。结果是任何 unrefed 计时器都不会阻止 Node 退出。

例如:

var to = setTimeout(myFunction,delay);
to.unref();

也适用于 setInterval

setInterval(myFunction,delay).unref();