0

我在递归中使用 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,我最终得到了大量的请求。

有没有更好的方法来处理这个问题?

谢谢!

4

1 回答 1

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)
} 
于 2012-08-23T20:17:29.073 回答