问题
If the delay
超过 2147483648 毫秒(24.8551 天)该函数将立即触发。
Example
setTimeout(function(){ console.log('hey') }, 2147483648) // this fires early
setTimeout(function(){ console.log('hey') }, 2147483647) // this works properly
我在 Chrome v26 和 Node.js v8.21 下尝试过
setTimeout的上限为0x7FFFFFFF
(or 2147483647
十进制)
这是因为 setTimeout 使用 32 位整数来存储其延迟值,因此任何超过该值的值都会导致问题
如果您想要在 X 天后触发超时,您可以尝试使用setInterval
相反,使用较低的延迟值,如下所示
function setDaysTimeout(callback,days) {
// 86400 seconds in a day
var msInDay = 86400*1000;
var dayCount = 0;
var timer = setInterval(function() {
dayCount++; // a day has passed
if(dayCount == days) {
clearInterval(timer);
callback.apply(this,[]);
}
},msInDay);
}
然后你会像这样使用它
setDaysTimeout(function() {
console.log('Four days gone');
},4); // fire after 4 days
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)