我有以下代码
startProgressTimer: function () {
var me = this,
updateProgressBars = function (eventItems) {
alert("updateProgressBars: looping");
alert("me.eventProgressTimerId:" + me.eventProgressTimerId);
var i = 0;
if (eventItems.length === 0) {
alert("internal Stop Begin")
clearInterval(me.eventProgressTimerId);
alert("internal Stop End")
eventItems = [];
}
for (i = 0; i < eventItems.length; i++) {
if (eventItems[i]._eventId) {
eventItems[i].updateProgressBar();
}
}
};
alert("Start Progress Timer");
this.eventProgressTimerId = setInterval(function () {
updateProgressBars([]);
}, 10000);
}
当调用该函数时,我希望它能够运行并且只有它继续循环才能达到最低点。
屏幕输出
ALERT:updateProgressBars: looping
ALERT:me.eventProgressTimerId:10
ALERT:internal Stop Begin
ALERT:internal Stop End
ALERT:updateProgressBars: looping
ALERT:me.eventProgressTimerId:10
ALERT:internal Stop Begin
ALERT:internal Stop End
任何想法
答案 0 :(得分:1)
我怀疑问题可能是你没有显示的代码对于它所属的任何对象的同一个实例多次调用startProgressTimer()
方法,然后在你存储间隔id的方法中实例属性this.eventProgressTimerId
- 因此多次调用会覆盖该属性,您只能取消最后一次。
如果是这种情况,一个简单的解决方法是将你的eventProgressTimerId
声明为startProgressTimer()中的局部变量。