【问题标题】:Node.js setInterval() stops executing after 25 daysNode.js setInterval() 25 天后停止执行
【发布时间】:2019-01-20 22:49:56
【问题描述】:

在我的 Node.js 应用程序中,我使用 setInterval() 每 1 小时运行一次特定函数。该函数正常执行大约 25 天,然后计时器停止触发。

25 天似乎非常接近 Node.js 的 TIMEOUT_MAX(2^31 毫秒 ≈ 25 天),但我真的不明白为什么 setInterval() 应该在那之后停止执行。

更新:

我认为这可能是由 Node.js 中的以下错误引起的:setInterval callback function unexpected halt #22149

【问题讨论】:

  • 您是否尝试过使用递归 setTimeout 代替?
  • 你的代码是什么?
  • 你能用类似cron / schtasks / 其他操作系统级别的调度程序吗?
  • @NoobTW 我不知道 node-cron,但我们之前使用过 node-schedule 并且遇到了完全相同的问题。无论如何,它现在似乎已经在 Node.js 中修复了。

标签: javascript node.js setinterval


【解决方案1】:

似乎Node.js 10.9.0 中的错误 (#22149) 已修复。

可能还值得注意的是,这个错误似乎影响了 both setInterval()setTimeout()(如报告的 here),因此在回调函数中使用 setTimeout() 的解决方法不会工作。

【讨论】:

    【解决方案2】:

    在 github 中阅读问题后,我认为他们会在下一个版本中修复它。如果您需要在此之前解决,您可以尝试递归超时。查看我的代码:

    function doSomething() {
        console.log('test');
    }
    
    function doSomethingInterval() {
       doSomething();
       setTimeout(doSomethingInterval, 1000);
    }
    
    doSomethingInterval();
    

    【讨论】:

      【解决方案3】:

      这是一个已知的错误。您最简单的解决方法是改用 setTimeout,然后在您的回调函数中调用另一个 setTimeout。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 2020-03-16
        相关资源
        最近更新 更多