JavaScript问题:setInterval调用metro函数时new Date()未实时更新
问题原因
你现在的问题出在传递给setInterval的时间参数是固定值:hourNow和minutesNow只在代码初始化的时候计算了一次,也就是你创建定时器那一刻的时间,之后每30秒触发定时器时,只会重复传递这两个已经固定的旧值,不会重新获取当前时间。
解决办法
有两种简单的修复方式:
方式一:在metro函数内部实时获取时间
把获取当前时间的逻辑移到metro函数里,这样每次函数被调用时都会重新计算最新时间:
const interval = setInterval(metro, 30000); function metro() { // 每次调用都重新获取当前时间 let now = new Date(); let hourNow = now.getHours(); let minutesNow = now.getMinutes(); // 你的业务逻辑代码 }
方式二:用匿名函数包裹,每次触发时重新计算时间
如果必须要给metro传时间参数,可以在定时器的回调里实时计算最新时间,再传给metro:
const interval = setInterval(() => { let now = new Date(); let hourNow = now.getHours(); let minutesNow = now.getMinutes(); metro(hourNow, minutesNow); }, 30000);
内容的提问来源于stack exchange,提问作者juanOwl
相关产品推荐
相关产品推荐

