开发者

Stopping timeout started from an object instance when all references are lost

I made a polling system for which you must use instantiation, thus allowing you to have multiple pollers going at the same time.

The polling uses setTimeout to delay each request according to a defined poll rate.

Here is a very simplified version:

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();

Now if I do

poller1 = null;

The timeout is still running and will run forever. I need to do

poller1.stop(); 
poller1 = null;

for it to work as intended.

Is there any way to clear the timeout when all references are lost, thus omitting the need for calling poller1.stop(); before unreferencing the instance?


There's no way to "find" a lost timer index (they're just numbers). You could always wrap "setTimeout()" in a function that keeps a global registry or something. You'd still have the problem of having to identify them somehow, but there are several ways to approach that.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜