gpt4 book ai didi

javascript - 如果延迟超过 2147483648 毫秒,setTimeout 会立即触发

转载 作者:数据小太阳 更新时间:2023-10-29 04:01:33 25 4
gpt4 key购买 nike

问题

如果延迟超过 2147483648 毫秒(24.8551 天),该函数将立即触发。

例子

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(或者十进制的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

关于javascript - 如果延迟超过 2147483648 毫秒,setTimeout 会立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com