JavaScript settimeout不一致

时间:2014-09-08 19:47:40

标签: javascript google-chrome setinterval

setInterval()不一致

我正在尝试创建一个像秒表一样工作的对象,但 Chrome 和Firefox浏览器之间存在100毫秒的差异。以下代码和测试在 Safari Chrome 中均失败,但在Firefox中传递。

问题:为什么会发生这种情况?

问题:如何跨浏览器实现与此对象的一致性?

您可以在多个浏览器中运行此SAMPLE并观看测试通过或失败。该示例位于JSBIN上,因此您也可以对其进行代码更改。

计时器对象(SUT)

我已经构建了一个 Timer 对象,它基本上像秒表一样工作:

function Timer() {
  this.interval = null;
  this.time = 0;
}

Timer.prototype.start = function () {
  var self = this;
  this.interval = setInterval(function () {
    self.time += 100;
  }, 100);
};

Timer.prototype.stop = function () {
  clearInterval(this.interval);
};

定时器测试(茉莉花)

此测试启动和停止计时器。它在Chrome中失败但传入FireFox。

describe("Timer", function () {

  it("should stop and record time accurately", function (done) {
    var timer = new Timer();
    timer.start();
    setTimeout(function () {
      expect(timer.time).toEqual(600);
      done();
    }, 600);
  });

});

1 个答案:

答案 0 :(得分:0)

如果是webkit,只需在对象构造函数中将this.time设置为100,如果是gecko,则设置为0