我想构建一个每天触发的间隔循环。在这个循环中应该再次是一个间隔循环,每20分钟触发一次。所以现在,我很好奇,如果我能像这样构建它:
updatePeriodically() {
window.setInterval(() => {
console.log('Fetch daily sensor update!')
getInitData()
.then((results) => {
this.setState({ dataSensor: results })
})
window.setInterval(() => {
console.log('Fetch 20 minute sensor update')
getData()
.then((results) => {
this.setState({ dataSensor: results })
})
}, UPDATE_INTERVAL)
}, DAILY_INTERVAL)
}
我只是想知道,如果每天触发一个新的20分钟间隔循环并且不会停止旧循环,那么最后几天后,我有四个20更新循环?或者也许有人知道,如何更好地做到这一点?
答案 0 :(得分:1)
我猜你可以通过检查间隔是否已经开始(你的内部间隔),或者只使用一个间隔并且每隔多次重复一次getInitdata来优化你的间隔计时器,如下:
updatePeriodically() {
var remaining = 0;
window.setInterval(() => {
if (remaining <= 0) {
console.log('Fetch daily sensor update!');
getInitData().then((results) => {
this.setState({ dataSensor: results });
});
remaining = DAILY_INTERVAL;
} else {
remaining -= UPDATE_INTERVAL;
console.log('Fetch 20 minute sensor update');
getData().then((results) => {
this.setState({ dataSensor: results });
});
}
}, UPDATE_INTERVAL);
}
这样做的好处是它只使用1个循环来进行定期更新,并且不会启动额外的间隔。
但我建议不要在组件内创建此更新循环。我假设您要显示的数据由商店管理,您应该有一个运行此“轮询”更新的中心位置,以便所有组件一次获取新数据,而不是实现此类轮询的每个组件功能。奖励是所有依赖于此数据的组件同时获取其新状态数据。