Невозможно сбросить setInterval - PullRequest
0 голосов
/ 12 июня 2019

Я не могу сбросить функцию setInterval в тс. Я попытался clearInterval, но это просто останавливает интервал. Я также попытался установить его на неопределенное значение, но это не помогло. Вариант использования в основном заключается в том, чтобы найти интервал времени между двумя входами веб-сокета и проверить, не меньше ли он двух минут. Но в конечном итоге таймер продолжает работать быстрее.

function {
  this.timeLeftForPlantThree = 120;

  const a = 1000;
  let interval3;
  clearInterval(interval3);
  interval3 = undefined;
  if (typeof(interval3) === 'undefined') {
    interval3 = setInterval(() => {
      if (this.timeLeftForPlantThree > 0) {
        this.timeLeftForPlantThree--;
        this.plantThreeRed = false;
        console.log(this.timeLeftForPlantThree);
      } else {
        console.log('***' + this.timeLeftForPlantThree);
        this.plantThreeRed = true;
      }
    }, a);
  }
}

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Вы делаете что-то странное с этим интервалом!

var interval3 = setInterval(() => {});

function {
  this.timeLeftForPlantThree = 120;
  const a = 1000;
  interval3 = setInterval(() => {

    // call clear interval here when some condition is satisfied

    if (this.timeLeftForPlantThree > 0) {
      this.timeLeftForPlantThree--;
      this.plantThreeRed = false;
      console.log(this.timeLeftForPlantThree);
    } else {
      console.log('***' + this.timeLeftForPlantThree);
      this.plantThreeRed = true;
    }
  }, a);
}
0 голосов
/ 12 июня 2019

Присвойте свой интервал переменной и затем сбросьте его:

this.interval = setInterval(() => {
      // do something here
}, 1000);

И сброс:

if (this.interval) clearInterval(this.interval);
this.interval = null;

Что касается вашего кода , вы создаете пустую переменную/ интервал, а затем очистить его, который выдает ошибку.

И объявить переменную для интервала глобально.

let interval3;

И запустить его внутри функции:

function runInterval() {
  this.timeLeftForPlantThree = 120;

  const a = 1000;
  if (!this.interval3) {

    this.interval3 = setInterval(() => {
      if (this.timeLeftForPlantThree > 0) {
        this.timeLeftForPlantThree--;
        this.plantThreeRed = false;
        console.log(this.timeLeftForPlantThree);
      } else {
        console.log('***' + this.timeLeftForPlantThree);
        this.plantThreeRed = true;
      }
    }, a);
  }
}

Исбросить его:

function resetInterval() {
  if (this.interval) clearInterval(this.interval);
  this.interval = null;
}
...