我在递归中使用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>
谢谢!
答案 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)
}