最近在做驾驶舱 数据大屏,应甲方要求,大屏必须在整点 间隔十分钟 来刷新接口获取数据,所以在考虑减少定时器触发的次数来完成需求,以下是我的两个想法。
第一种,每隔10秒或者固定秒数触发定时器,定时器内部判断是否整点;
let isRenovate = false;
setInterval(() => {
let currentData = new Date();
let remainder = currentData.getMinutes() % 10;
if(!isRenovate && remainder === 0) {
isRenovate = true;
if(isRenovate) {
console.log('我刷新了')
}
} else if (remainder != 0) {
isRenovate = false;
}
}, 1000)
第二种,进入页面判断据整点时间秒数,创建 setTimeout 整点触发,然后在setTimeout中创建整点 setRenovate 定时器;
let currentData = new Date();
let stepMin = 10;
let remainder = currentData.getMinutes() % stepMin;
let surplusSecondData = ((stepMin - remainder) * 60) - currentData.getSeconds();
let isFirstRenovate = false;
let timer = setTimeout(() => {
setRenovate()
clearTimeout(timer);
timer = null;
}, surplusSecondData * 1000)
function setRenovate() {
setInterval(() => {
}, stepMin * 60 * 1000)
}