0
我使用递归一个定时器,模拟的setInterval,同时防止它在自身上,例如运行:clearSetTimeout,防止setTimeout的公司从堆放
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
被再次调用时,它似乎没有真正清除超时,并且最终导致大量请求相互重叠。
有没有更好的方法来处理这个问题?
谢谢!
'self.request();包含ajax逻辑并调用this.poll()' - 请求'立即调用'poll',还是在其Ajax回调中调用?如果它立即执行,那么我希望你最终会得到大量的请求,因为'request'产生了一个新的Ajax请求,然后立即排队一个新的请求在下一秒运行,可能在旧请求之前已解决。 (除非你的意图实际上是每隔一秒轮询一次)。 – apsillers
'request'在ajax回调中调用'poll',意图是每秒运行一次。但是现在,如果我刷新页面几次,我会在开始时收到一些请求。 – dzm
如果刷新页面,则会导致超时,从而清除JavaScript。你所看到的是来自上一页加载的旧请求。 – epascarello