Как остановить setInvterval на основе изменения значения? - PullRequest
0 голосов
/ 24 марта 2020

Кто-нибудь, пожалуйста, объясните мне, почему этот l oop никогда не останавливается?

const interval2 = setInterval(() => {
    const a = "false"
    if (a == "true"){
        clearInterval(interval2)
    }
    console.log("Hello");
    a == "true"
  }, 1000);

Вывод:

Hello

Hello

Привет

Привет

..

Как я понял, clearInterval должен завершить интервал. но он просто продолжает идти.

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Во второй строке вы вводите «false» в константу, а затем проверяете, равно ли оно «true». Вам нужно объявить a как переменную в другой области, вне обратного вызова интервала.

let a = "false"
const interval2 = setInterval(() => {
    if (a == "true"){
        clearInterval(interval2)
    }
    console.log("Hello");
    a = "true"
  }, 1000);

Также в последней строке обратного вызова у вас есть странное утверждение: a == "true" . Вероятно, это должно быть a = "true"

0 голосов
/ 24 марта 2020

Это происходит потому, что каждый раз, когда setInterval повторяется, устанавливается в «ложь» и, таким образом, a == "true" никогда не выполняется, и это l oop никогда не останавливается. Вы можете исправить это, объявив переменную снаружи.

Кроме того, мы не можем переназначить значение переменной const, поэтому нам нужно использовать let.

Также, чтобы сбросить значение a на "true" используйте a = "true" вместо a == "true"

let a = "false"
const interval2 = setInterval(() => {
  if (a === "true") {
    clearInterval(interval2)
  }
  console.log("Hello");
  a = "true"
}, 2000);
...