非阻塞setTimeout

时间:2015-10-25 02:22:06

标签: javascript node.js settimeout

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

即。条件setTimeout只会触发回调函数,只要进程仍在运行。

实际例子:

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

2 个答案:

答案 0 :(得分:4)

如果您希望维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,则可以使用clearTimeout,但在节点中使用unref() {{会容易得多3}}。结果是任何unref ed计时器都不会阻止Node退出。

例如:

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

也适用于setInterval

setInterval(myFunction,delay).unref();

答案 1 :(得分:0)

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

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

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