解决方案归结为"如何清除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
开始循环两次。
答案 0 :(得分:1)
有很多不同的方法可以解决这个问题,但是您发布的代码中的问题是,当调用stop时,超时不会被清除 - 这意味着,正如您所注意到的那样,您最终可能会遇到两个循环运行
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。
答案 1 :(得分:0)
这是等同于clearTimeout
的Ember: