我制作了一个必须使用实例化的轮询系统,从而允许您同时具有多个轮询器。

轮询使用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()”包装在保留全局注册表之类的函数中。您仍然有必须以某种方式识别它们的问题,但是有几种方法可以解决这些问题。

10-04 11:40