繁体   English   中英

非阻塞setTimeout

[英]Non-blocking setTimeout

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

也就是说,条件setTimeout的类型仅在进程仍在运行时才触发回调函数。

实际示例:

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

如果要维护对所有未完成计时器的引用,然后在应用程序退出过程中将其清除,则可以使用clearTimeout ,但是在node中在unref()上使用unref() Node doc要容易unref 结果是任何未unref计时器都不会阻止Node退出。

例如:

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

也可以与setInterval一起使用

setInterval(myFunction,delay).unref();

如果看一下setTimeout的文档,您会注意到它返回了一个timeoutObject,该对象可用于通过clearTimeout(obj)取消超时。

因此,您可以做的是通过存储其id对象来跟踪创建的所有超时。 然后,您可以随时结束所有超时。


如果您只是想退出该进程,而忽略其他所有内容,则可以使用process.exit() (如果要返回非零错误代码,则传递一个参数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM