JS Interval精确到1ms

时间:2017-10-25 02:17:22

标签: javascript

我找到了一个在JS中创建自校正间隔的函数,因为setInterval不能被认为是准确的。当注销nextTick时,当间隔为1秒,1 100秒或1 10秒时,nextTick,即漂移定位器上部(为技术性)打印为预期

而不是下一个刻度是1000毫秒,它通常是999,有时是998.遵循上述间隔,你会看到99,98表示100秒,通常9表示10秒钟。

现在,当谈到毫秒 - 即创建一个应该每毫秒调用一次的间隔时,nextTick会打印出NaN或负数。我认为这只是因为间隔太小了。我想知道它是否可以将精度降低到1毫秒

class Interval {

    constructor(interval, onTick){
        this.interval = interval;
        this.onTick = onTick || function(){};
        this.timer = false;
        this.ticks = 0;
        this.startTime = 0;
        this.currentTime = 0;
        this.elapsedTime = 0;
        return this;
    }

    run(){
        this.currentTime = Date.now();
        if(!this.startTime){
            this.startTime = this.currentTime;
        }

        this.onTick();

        let nextTick = this.interval - (this.currentTime - (this.startTime + (this.ticks * this.interval)));
        //console.log(nextTick);
        this.ticks++;

        let self = this;
        this.timer = setTimeout(function(){
            self.run();
        }, nextTick);

        return this;
    }

    start(){
        this.run();
        return this;
    }

    stop(){
        clearTimeout(this.timer);
        return this;
    }
}

Original

Fiddle

在小提琴中你可以逐个取消区间构造器的注释,看看我的意思。

0 个答案:

没有答案