Тайм-аут остановки начался с экземпляра объекта, когда все ссылки потеряны - PullRequest
1 голос
/ 15 апреля 2011

Я создал систему опроса, для которой вы должны использовать инстанцирование, что позволяет вам запускать несколько опросов одновременно.

Опрос использует 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 голосов
/ 15 апреля 2011

Нет способа «найти» индекс потерянного таймера (это просто числа).Вы всегда можете заключить "setTimeout ()" в функцию, которая хранит глобальный реестр или что-то в этом роде.У вас все еще была бы проблема с тем, чтобы как-то их идентифицировать, но есть несколько способов подойти к этому.

...