我已经在如下所示的节点中注册了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
所有延迟的值都小于2147483647,这是为什么它不起作用的原因。
答案 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.
上面的代码工作正常。