当所有引用都丢失时,从对象实例开始停止超时

时间:2011-04-15 16:00:51

标签: javascript reference settimeout

我建立了一个必须使用实例化的轮询系统,这样你就可以让多个轮询器同时运行。

轮询使用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()的需要;在引用实例之前?

1 个答案:

答案 0 :(得分:0)

没有办法“找到”丢失的计时器索引(它们只是数字)。您总是可以在保存全局注册表或其他内容的函数中包装“setTimeout()”。你仍然有必须以某种方式识别它们的问题,但有几种方法可以解决它。