我找到了一个在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;
}
}
在小提琴中你可以逐个取消区间构造器的注释,看看我的意思。