Как остановить метод, который зацикливается на массив? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть метод, который запускает setInterval, который вычисляет число (счетчик) каждую секунду, основываясь на заданном значении.У меня также есть метод, который останавливает интервал.

Однако, когда заданное значение является массивом, оно прекращает вычислять только последнее значение массива ... все остальные значения продолжают работать.

class Helpers {
  static interval: number[];
  static filtered: [];


 static start(value: Vehicle): void {   
    Helpers.interval = setInterval(value.calculateSpeed, 1000, value);
  }


  static stop() {
    clearInterval(Helpers.interval);
  }


  static iterateArray() {

      for (let i = 0; i < Helpers.filtered.length; i++) {
        Helpers.start(Helpers.filtered[i]);
      } 
  }


static iterateStop() {
      for (let i=0; i < Helpers.filtered.length; i++) { 
          Helpers.stop();
      }
  }
}




<button onclick="Helpers.iterateArray()">Start</button>
<button onclick="Helpers.iterateStop()">Stop</button>

Метод stop () работает, если в значении только 1 элемент: Vehicle - если есть больше, останавливается только последний элемент.Последний метод (iterateStop ()) был моей последней глупой попыткой решить эту проблему.

Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 20 апреля 2019

Вам нужно поместить значение в массив, а не присваивать его массиву, тогда, когда вы вызываете stop, вам нужно передать интервал методу. Также не забудьте инициализировать два массива.

Смотрите мои модификации ниже:

class Helpers {
  static interval: number[] = [];
  static filtered: [] = [];

  static start(value: Vehicle): void {   
    Helpers.interval.push(setInterval(value.calculateSpeed, 1000, value));
  }

  static stop(interval: number) {
    clearInterval(interval);
  }

  static iterateArray() {
    for (let i = 0; i < Helpers.filtered.length; i++) {
      Helpers.start(Helpers.filtered[i]);
    } 
  }

  static iterateStop() {
    for (let i=0; i < Helpers.interval.length; i++) { 
      Helpers.stop(Helpers.interval[i]);
    }
    // Maybe clear one or both of the arrays here?
    // This is up to you and how your app works.
    // Helpers.interval = []
    // Helpers.filtered = []
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...