node.js 中 setTimeout 的最大时间限制

Maximum time limit of setTimeout in node.js

我已经在节点中注册了一些 setTimeout 函数,如下所示。

//Formula: minutes * 60 > seconds * 1000 > miliseconds.
setTimeout(() => {console.log("One minute")}, 1 * 60 * 1000)        //delay 60000
setTimeout(() => {console.log("Five minutes")}, 5 * 60 * 1000)      //delay 300000
setTimeout(() => {console.log("Ten minutes")}, 10 * 60 * 1000)      //delay 600000
setTimeout(() => {console.log("Thirty minutes")}, 30 * 60 * 1000)   //delay 1800000
setTimeout(() => {console.log("One hour")}, 60 * 60 * 1000)         //delay 3600000
setTimeout(() => {console.log("Two hours")}, 120 * 60 * 1000)       //delay 7200000
setTimeout(() => {console.log("Five hours")}, 300 * 60 * 1000)      //delay 18000000

现在的问题是 setTimeout 需要超过 10 分钟 在我阅读 setTimeout 支持文档时无法正常工作 24.8天.

When delay is larger than 2147483647 or less than 1, the delay will be set to 1

所有延迟的值都小于 2147483647 为什么它不起作用???

我不确定你到底想在这里实现什么。如果您想在后期执行某些操作,请使用 Cron 而不是 setTimeout.

你原来问题的答案是

JavaScript store the delay as a 32-bit signed Integer internally. This causes an Integer overflow when using delays larger than 2147483647, resulting in the timeout being executed immediately.

以上代码运行良好。

当我在 node.js repo 上创建问题时,我终于得到了答案,基本上它不是 node.js 而是 heroku 问题。
在 heroku free dynos 是独一无二的,因为它们在 30 分钟不活动后进入睡眠状态,因此超过 30 分钟的时间不工作
Github issue