我制作了一个必须使用实例化的轮询系统,从而允许您同时具有多个轮询器。
轮询使用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();的需要。在取消引用实例之前?
最佳答案
无法“找到”丢失的计时器索引(它们只是数字)。您始终可以将“ setTimeout()”包装在保留全局注册表之类的函数中。您仍然有必须以某种方式识别它们的问题,但是有几种方法可以解决这些问题。