非阻塞setTimeout

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

即只有当进程仍在运行时才会触发callback函数的条件setTimeout

实际例子:

在实现一个通过设置一些超时来初始化自己的库的时候,你会希望一旦这个应用完成,你不需要明确地调用这个库来清除所有超时,并且不pipe这个应用是closures的。

如果要维护对所有未完成定时器的引用,然后将其清除为应用程序退出进程的一部分,则可以使用clearTimeout ,但是在节点上使用unref() 节点doc可能会更容易。 结果是,任何unref定时器都不会阻止节点退出。

例如:

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

与setInterval一起工作

 setInterval(myFunction,delay).unref(); 

如果您查看setTimeout的文档,您会注意到它会返回一个timeoutObject,它可以通过clearTimeout(obj)来取消超时。

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


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