如何停止循环数组的方法?

问题描述 投票:0回答:1

我有一个运行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>

如果value中只有1个元素,则stop()方法有效:Vehicle - 如果有更多元素只停止最后一个元素。最后一个方法(iterateStop())是我最后一次解决这个问题的愚蠢尝试。

任何帮助将非常感谢!

javascript typescript function oop methods
1个回答
2
投票

您需要将值推送到数组而不是将其分配给数组,然后在调用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 = []
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.