У меня проблема с clearTimeout, есть несколько экземпляров, в которых не работает

Итак, дело в том, что clearTimeout работает большую часть времени просто отлично, но иногда это не так. Сначала я вызываю функцию, в конце функции есть setTimeout для повторного вызова функции, запускающего цикл, и есть кнопка для очистки тайм-аута, которая, как я уже сказал, отлично работает большую часть времени. Код примерно такой. Счетчик, отображаемый в консоли, позволяет мне визуально видеть, когда функция выполняется и когда она останавливается.

РЕДАКТИРОВАТЬ: у меня уже есть это clearTimeout (foo_timeout), я написал это неправильно, извините.

var cons = 0

function foo(
  //do some asyncajaxstuff
  cons = cons++
  console.log(cons)
  foo_timeout = setTimeout(foo, 1200);
)

foo()

$("#unsettimeout").click(function(){
  clearTimeout(foo_timeout)
 })

person Mashyu    schedule 04.06.2020    source источник
comment
Вызов должен выглядеть как clearTimeout(foo_timeout)   -  person Ivan Kashtanov    schedule 04.06.2020
comment
Вы также захотите добавить var foo_timeout под var cons, так как это локальная переменная, как вы ее настроили.   -  person imvain2    schedule 04.06.2020


Ответы (1)


Ну, ваш пример ясно показывает, что clearTimeout никогда не сработает. Вы должны передать обработчик возвращаемого параметра из setTimeout.

var cons = 0;
var foo_timeout = null;

function foo() {

  cons = cons + 1;
  console.log(cons);

  foo_timeout = setTimeout(foo, 1200);
}

foo();

$("#unsettimeout").click(function() {
  clearTimeout(foo_timeout);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="unsettimeout">Unset Timeout</button>

person Józef Podlecki    schedule 04.06.2020