Как остановить setInterval без intervalID?

Я знаю, как остановить setInterval обычным способом:

var intervalId = setInterval(myFunction, 1000);
clearInterval(intervalId);

Что, если я не сохранил ссылку на intervalID? Есть ли способ найти все intervalID? Или очистить все интервалы?


person at.    schedule 23.03.2015    source источник
comment
Не надо! Просто делайте это должным образом. Вы поблагодарите себя позже. Существующие методы для этого представляют собой в лучшем случае угадывание или грубую силу. Ни один из них не может гарантировать, что какой-либо браузер на основе node.js не использует их внутри для необходимых задач (хотя я не думаю, что какой-либо крупный браузер делает это). Если у вас есть какой-то запущенный процесс, над которым вы работаете, вы можете быть в состоянии использовать инструменты разработчика вашего браузера, чтобы отменить его.   -  person technosaurus    schedule 23.03.2015
comment
Надеялся на лучший ответ ... но я думаю, я просто не должен допускать возникновения этой ситуации.   -  person at.    schedule 23.03.2015


Ответы (1)


Единственный способ, если вы не знаете идентификатор, - это перебор.

for(var c=0;c<10000;c++) {
   window.clearInterval(c);
}

По возможности сохраните идентификатор интервала. Если вы используете внешнюю библиотеку, которая реализует интервалы без ссылок, переопределите эти функции после загрузки. Этот метод грубой силы не рекомендуется использовать, потому что он занимает много времени и не дает гарантии, что он сработает.

person Tschallacka    schedule 23.03.2015
comment
Вместо того, чтобы использовать 10000 (конец), вы можете установить (и очистить) фиктивный интервал и использовать его как максимальный. Затем вы можете установить 0 (начало) для этого числа для последующего использования... при условии, что вы вынуждены использовать какую-то библиотеку, которую нельзя просто исправить. Вы даже можете добавить белый список для известных интервалов, которые вы не хотите убивать. - person technosaurus; 23.03.2015
comment
Это не сработает. Различные браузеры реализуют кажущиеся случайными числа. Это не всегда последовательный порядок. Просто посмотрите на этот пример. jsfiddle.net/tLc99quv/1 Чем дольше работает страница, тем больше появляется случайных чисел. А после счетчика интервалов GC иногда даже сбрасывается. Я видел, как это произошло. - person Tschallacka; 23.03.2015