0

我有以下代码

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

有任何想法吗

4

1 回答 1

1

我怀疑问题可能是您未显示的代码startProgressTimer()为它所属的任何对象的同一个实例多次调用该方法,然后在方法中您将间隔 id 存储在实例属性中this.eventProgressTimerId- 所以多次调用会覆盖该属性,您只能取消最后一个。

如果是这种情况,一个简单的解决方法是将您声明eventProgressTimerId为 startProgressTimer() 中的局部变量。

于 2013-10-11T14:02:31.797 回答