node.js中的setTimeout的最大时限

时间:2018-09-12 11:48:41

标签: javascript node.js heroku settimeout v8

我已经在如下所示的节点中注册了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天。< / p>

  

当延迟大于2147483647或小于1时,延迟将设置为1

enter image description here

所有延迟的值都小于2147483647,这是为什么它不起作用的原因。

2 个答案:

答案 0 :(得分:0)

最后,当我在node.js仓库上创建问题时,我得到了答案,基本上不是node.js,而是heroku问题。
在heroku中,免费动态是独特的,因为它们在闲置30分钟后便进入睡眠状态,因此超过30分钟的时间无法工作
Github issue

答案 1 :(得分:-3)

我不确定您到底想在这里实现什么。如果要在以后执行某些操作,请使用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.

上面的代码工作正常。

enter image description here