如何使用Ember.run.later实现秒表倒计时

时间:2015-05-27 14:14:05

标签: javascript algorithm ember.js

解决方案归结为"如何清除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开始循环两次

2 个答案:

答案 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:

http://emberjs.com/api/classes/Ember.run.html#method_cancel