解决方案归结为“如何清除 Ember.run.later
的间隔”
class CountdownTimer {
constructor() {
this.counterContinue = false;
}
start() {
this.counterContinue = true;
this.decreaseCounterLoop();
}
stop() {
this.counterContinue = false;
}
decreaseCounterLoop() {
Ember.run.later(this, function() {
//do work
if (this.counterContinue) {
this.decreaseCounterLoop();
}
}, 1000);
}
}
我尝试实现一个可以随意开始和停止的倒数计时器。但目前这有一个错误。
我调用 stop()
,然后再次快速调用 start()
,以便 decreaseCounterLoop
开始循环两次 一秒钟。
最佳答案
有许多不同的方法可以解决此问题,但您发布的代码中的问题是调用停止时超时未清除 - 这意味着,正如您所注意到的,您最终可能会运行两个循环。
class CountdownTimer {
constructor() {
this.timeout = null;
}
start() {
this.decreaseCounterLoop();
}
stop() {
clearTimeout(this.timeout);
}
decreaseCounterLoop() {
this.timeout = setTimeout(this, function() {
//do work
this.decreaseCounterLoop();
}, 1000);
}
}
我没有使用过 Ember,但同样的逻辑应该可以使用 Ember.run.cancel .
关于javascript - 如何使用 Ember.run.later 实现秒表倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485112/