我建立了一个必须使用实例化的轮询系统,这样你就可以让多个轮询器同时运行。
轮询使用setTimeout根据定义的轮询速率延迟每个请求。
这是一个非常简化的版本:
function Poller(url, rate, callback) {
var timeoutReference = null;
var public = {
poll: function() {
/* Request here i.e. $.GET(....)
calling callback with recieved data on success */
console.log("Poller running");
timeoutReference = setTimeout(public.poll, rate);
},
stop: function() {
clearTimeout(timeoutReference);
}
}
return public;
}
var poller1 = new Poller('http://www.site.com/feed', 5000, readData);
poller1.poll();
现在,如果我这样做
poller1 = null;
超时仍在运行,并将永久运行。我需要做
poller1.stop();
poller1 = null;
让它按预期工作。
有没有办法在所有引用丢失时清除超时,因此省略了调用poller1.stop()的需要;在引用实例之前?
答案 0 :(得分:0)
没有办法“找到”丢失的计时器索引(它们只是数字)。您总是可以在保存全局注册表或其他内容的函数中包装“setTimeout()”。你仍然有必须以某种方式识别它们的问题,但有几种方法可以解决它。