我想每20秒做一些东西,另外一个每30秒做一次,另一个每40秒做一次。这就是我为这种情况所做的事情:
const seconds = 1000;
setInterval(doStuff1, 20 * seconds);
setInterval(doStuff2, 30 * seconds);
setInterval(doStuff3, 40 * seconds);
然而,这对我来说并不是一个好方法。此外,它可能会减慢机器人的速度(无论它是什么样的机器人),但由于它是一个后台机器人,所以有点不重要。
这是最正确的方法吗?
答案 0 :(得分:2)
拥有三个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个调用