我在 JavaScript 中使用 setTimeout 函数时遇到了奇怪的行为。我预计 setTimeout 调用会在各自的持续时间后记录消息,但我观察到运行脚本后立即记录了“30 天”的消息。这是我使用的代码:
setTimeout(() => {
console.log("1 day");
}, 86400000); // 1 day in milliseconds
setTimeout(() => {
console.log("10 days");
}, 864000000); // 10 days in milliseconds
setTimeout(() => {
console.log("100 days");
}, 86400000000); // 100 days in milliseconds
setTimeout(() => {
console.log("30 days");
}, 3456000000); // 30 days in milliseconds
运行脚本后,我看到立即记录输出“30 天”,而其他消息尚未记录。
为什么超时设置为 30 天后立即记录“30 天”?
我将不胜感激有关此行为的任何见解或解释。谢谢!
在 30 天的时间里,值 3456000000(毫秒)超出了 32 位有符号整数限制。发生这种情况时,该值会回绕,并且解释的超时值实际上变得无效或接近 0,从而导致立即执行。
const targetTime = Date.now() + delayInMilliseconds;
const interval = setInterval(() => {
if (Date.now() >= targetTime) {
clearInterval(interval);
console.log("Time's up!");
}
}, 1000);
您可以这样做以跟踪目标时间