我想每 20 秒做一件事情,每 30 秒做一件事情,每 40 秒做一件事情。对于这种情况,我会这样做:
const seconds = 1000;
setInterval(doStuff1, 20 * seconds);
setInterval(doStuff2, 30 * seconds);
setInterval(doStuff3, 40 * seconds);
但是,这对我来说似乎不是一个好方法。此外,它可能会稍微减慢机器人的速度(不管它是什么机器人),但一点点并不重要,因为它是后台机器人。
这是最正确的方法吗?
拥有三个 setIntervals
应该没什么大不了的,但是如果您没有任何限制需要通过单击按钮来控制停止某个间隔,那么你可以考虑这样的事情。
const seconds = 1000;
const time = 0;
const interval = setInterval(() => {
time += 10
(time % 20 === 0) && doStuff1();
(time % 30 === 0) && doStuff2();
(time % 40 === 0) && doStuff3();
}, 10 * seconds);
这并没有带来很好的优化,但这只是一种记住您启动的间隔的简单方法,它只是一个,而不是有多个间隔,稍后忘记对一个间隔进行 clearInterval
及时。
也没有开销。您的 20、30 和 40 的 3 个间隔将在 100 秒的跨度内触发 10 次,这与一个 10 间隔相同。
100 秒
3 个间隔 - 10 次调用
1 个间隔 - 10 次调用
200 秒
3 个间隔 - 21 次调用
1 个间隔 - 20 次调用
300 秒
3 个间隔 - 32 次调用
1 个间隔 - 30 次调用