2013-10-11 35 views
0

我有以下代码clearInterval犯规停止循环

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

调用startProgressTimer()多少次?如果它在同一个实例上多次调用,并且将间隔标识存储为实例变量,则只能取消最后一个实例变量。为什么不在'startProgressTimer()'中声明'eventProgressTimerId'变量作为局部变量? – nnnnnn

+0

嘿优秀,有点调整,它的工作。非常感谢您 –

+0

在这种情况下,或许我会将我的评论作为您的答案进行改写。 – nnnnnn

回答

1

我怀疑问题可能是你不显示的代码调用不止一次startProgressTimer()方法多为它属于什么对象相同的实例,然后在您将间隔标识存储在实例属性this.eventProgressTimerId中的方法中 - 因此多次调用会覆盖该属性,并且只能取消最后一个。

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