clearSetTimeout,防止setTimeout堆叠起来

时间:2012-08-23 19:09:02

标签: javascript ajax settimeout

我在递归中使用setTimeouts来模拟setInterval,同时防止它在自身上运行,例如:

this.poll = function() {
    var self = this;
    if(self.timeout) {
          clearTimeout(self.timeout)
    }
    self.timeout = setTimeout(function(){
      self.request();
    }, 1000);
}

self.request();包含ajax逻辑并调用this.poll()

问题是,当再次调用this.poll时,似乎没有真正清除超时,并且我最终会收到大量的请求。

有没有更好的方法来处理它?<​​/ p>

谢谢!

1 个答案:

答案 0 :(得分:0)

为什么要模拟 setInterval ,而不是使用标记来防止同时运行两次?

this.poll = function(){
  if(this.running) return;
  this.running = true;
  var self = this;
  setIntervar(function(){
     var callback = function(){
        //your stuff 
        self.running = 0;
     };
     self.request(.....,callback);
  },1000)
}