Остановка рекурсивного setTimeout

207
28 августа 2018, 05:10

Есть таймер с рекурсией, мне его нужно остановить на определённом моменте, но он продолжает считать дальше.

Пытался if(i>stop) clearTimeout(rec); засунуть внутрь в начало, в конец, вынести за пределы - ничего не помогает..

Что делать?

Код:

var i = 0;
var stop = 10;
var rec = setTimeout(function recFun() {
    i++;
    console.info(i);                
    rec = setTimeout(recFun, 300);
}, 300);
if(i>stop) {
    clearTimeout(rec);
}
Answer 1

То, что вы хотите сделать, подходит не под setTimeout, а под setInterval (периодический запуск таймера). С его помощью вы как раз сможете внутри функции, положенной в setInterval проверять превышен ли порог stop счетчиком i и в этом случае остановить интервальный таймер:

var i = 0;
var stop = 10;
var timer = setInterval(function() {
  console.info(++i);
  if (i > stop) clearInterval(timer);
}, 300);
READ ALSO
Декодирование ссылки

Декодирование ссылки

Есть код, которым нужно взять ссылку, поделить её и использоватьВсё работает нормально, но не с кириллицей

200
Собрать данные с формы с загрузкой файлов

Собрать данные с формы с загрузкой файлов

Необходимо с формы собрать данные по файлам для дальнейшей передачи их AJAX'ом на сервер

203
Выбор случайных элементов из массива [дубликат]

Выбор случайных элементов из массива [дубликат]

На данный вопрос уже ответили:

205
Как правильно “готовить” авторизацию в SPA?

Как правильно “готовить” авторизацию в SPA?

Цель такая: написать бэкенд ASPNet Core MVC* SPA для работы с ReactJS и дальнейшей возможностью переиспользовать существующий API для создания, скажем,...

190