在 0 秒每 5 分钟检查一次 setInterval
Checking setInterval every 5 minutes on the 0 second
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 分钟执行一次代码,那么就不要让它无谓地每秒执行一次,只为了 return。只需每 5 分钟(300000 毫秒)运行 让它执行您需要执行的操作,并删除所有不必要的 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 负责“做这件事”,而 else returns.
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>
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 分钟执行一次代码,那么就不要让它无谓地每秒执行一次,只为了 return。只需每 5 分钟(300000 毫秒)运行 让它执行您需要执行的操作,并删除所有不必要的 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 负责“做这件事”,而 else returns.
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>