const secondsInterval = () => {
const date = getNow();
if (dayjs(date).minute() % 5 !== 0 && dayjs(date).second() !== 0) {
console.log("return...");
return;
}
console.log("checking...");
...
};
// Check every second, if we're at the 5-minute interval check.
setInterval(secondsInterval, 1000);
这似乎被卡住了。它是"检查";每5分钟的每一秒。我做错了什么?提前谢谢。
目标:;"检查";每分00秒::00:00、:05:00、:10:00、:15:00等再次感谢。
你应该知道下一个四舍五入的5分钟是什么时间
const FIVE_MIN = 1000 * 60 * 5;
function waitAndDoSomething() {
const msToNextRounded5Min = FIVE_MIN - (Date.now() % FIVE_MIN);
console.log(`Waiting ${msToNextRounded5Min}ms. to next rounded 5Min.`);
setTimeout(() => {
console.log('It is now rounded 5 min');
waitAndDoSomething();
}, msToNextRounded5Min);
}
waitAndDoSomething();
如果你只关心每5分钟执行一次代码,那么不要让它不必要地每秒钟执行一次,只会返回。只要让它每5分钟运行一次(300000 MS(,让它做你需要做的事情,并删除所有对5分钟标记代码的检查,这是不必要的。
const secondsInterval = () => {
// -------------------- Remove ----------------
//const date = getNow();
//if (dayjs(date).minute() % 5 !== 0 && dayjs(date).second() !== 0) {
// console.log("return...");
// return;
//}
// -------------------- Remove ----------------
console.log("checking...");
...
};
// Check every 5 mins
setInterval(secondsInterval, 300000);
if的逻辑很古怪。在这里,我颠倒了它,这样if就可以处理"if";做那件事;而另一个返回。
const secondsInterval = () => {
const date = dayjs(new Date());
if (dayjs(date).minute() % 5 == 0 && dayjs(date).second() == 0) {
console.log("checking...");
} else {
console.log("returning...");
return;
}
//...
};
// Check every second, if we're at the 5-minute interval check.
setInterval(secondsInterval, 1000);
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>