Node.JS:setTimeout不保持进程运行

我想给这个过程增加一个小时的超时时间,以防止在stream死锁的情况下永远停留。 唯一的问题是如果我说setTimeout,这个过程没有机会提前结束。

有一种方法可以在大约一个小时后强制退出超时,而不会使进程继续运行? 或者我坚持使用process.exit和做没有这个超时?

我不知道什么时候unref被添加到节点,但现在这是一个可能的解决scheme。 重用马特的代码:

 var timeoutId = setTimeout(callback, 3600000); timeoutId.unref(); // Now, Node won't wait for this timeout to complete if it needs to exit earlier. 

该文件说:

在setTimeout的情况下,当你重新创build一个单独的计时器来唤醒事件循环时,创build太多这些会对事件循环的性能产生不利影响 – 明智地使用。

不要跟着野猪走。

如果保存setTimeout返回的值,则可以在使用clearTimeout触发之前将其取消,如下所示:

 var timeoutId = setTimeout(callback, 3600000); // 1 hour // later, before an hour has passed clearTimeout(timeoutId); 

使用作为process.watchers() 实现的特性的可能解决scheme,但我不知道它是否包含在发布的版本中。 截至这篇文章的拉请求仍然是开放的。

但一般来说,你会写一个自定义的setTimeout函数,将所有的超时添加到一个计数器,并在超时之前的callback,它会从计数器中删除。

然后创build一个持续的时间间隔,间隔时间将检查并注意所有步行者是否只是您的自定义函数设置的超时。

当它注意到这个时,它将(清除所有这些超时,导致)退出。

这当然不是很好,因为

  • 这个概念没有被certificate。 (我不知道process.watchers()会返回什么样的数据,或者甚至可以工作)
  • 间隔是一个轮询方法。 (如果你想立即返回在低CPU使用率的同时不太好)