我有一个运行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())是我最后一次解决这个问题的愚蠢尝试。
任何帮助将非常感谢!
您需要将值推送到数组而不是将其分配给数组,然后在调用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 = []
}
}