我正在构建一个离子应用程序,并且在组件的构造函数中,我有一个循环遍历所有项目的循环。在循环中,我编写了setInterval,它从内部调用一个函数,如下所示。
var thisScope = this;
for (let i = 0; i < this.schedules.length; i++) {
(function() {
thisScope.showTime[i] = new Date();
thisScope.showTime[i].setHours(0, 0, 0);
thisScope.schedules[i].afh.timerIncDec = '00:00:00';
if (!thisScope.timerFinish || AfhListviewComponent.timerInSeconds[i] !== 0 || thisScope.schedules[i].afh.timerIncDec != '00:00:00') {
thisScope.timerId = setInterval(() => {
thisScope.timerTick(thisScope.schedules[i]);
}, 1000);
} else if (thisScope.timerFinish || AfhListviewComponent.timerInSeconds[i] === 0 || thisScope.schedules[i].afh.timerIncDec === '00:00:00') {
clearInterval(thisScope.timerId);
}
})();
}
这里我要设置计时器(它的计算是在timerTick
函数中完成的)。在这里,我面临的问题是被重叠的setInterval,并且其速度增加的速度小于1000
。循环的每个项目都应维护自己的setInterval
实例。
用作增量和减量的变量是timerInSeconds
,该变量是静态写入同一组件中的。
此处1000
的值被同一循环或具有更多调度的同一循环内的其他setInterval重叠。