Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS间隔精确到1ms_Javascript - Fatal编程技术网

Javascript JS间隔精确到1ms

Javascript JS间隔精确到1ms,javascript,Javascript,我在JS中找到了一个创建自校正间隔的函数,因为不能相信setInterval是准确的。当注销nextTick时,当间隔为1秒、1100秒或十分之一秒时,漂移修正器上部的nextTick按预期打印 下一个滴答声不是1000毫秒,通常是999,有时是998。按照前面提到的间隔,您会看到值,例如99、98表示百分之一秒,通常是9表示十分之一秒 现在,当涉及到毫秒时,即创建一个应该每毫秒调用一次的间隔,nextTick正在打印NaN或负数。我想这只是因为间隔太小了。我想知道是否有可能将精确度降低到1毫秒

我在JS中找到了一个创建自校正间隔的函数,因为不能相信
setInterval
是准确的。当注销
nextTick
时,当间隔为1秒、1100秒或十分之一秒时,漂移修正器上部的
nextTick
按预期打印

下一个滴答声不是1000毫秒,通常是999,有时是998。按照前面提到的间隔,您会看到值,例如99、98表示百分之一秒,通常是9表示十分之一秒

现在,当涉及到毫秒时,即创建一个应该每毫秒调用一次的间隔,
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;
    }
}


在fiddle中,您可以逐个取消对间隔构造函数的注释,以了解我的意思。

不,JavaScript或任何非实时系统中不可能有如此高精度的计时器。需要这种准确性的事情(如音频计时)必须安排活动。此外,请检查此选项是否有用:如果您只需要一个不漂移的时钟,请查看是否需要1ms的间隔,如果没有实时操作系统,这几乎是不可能的。除了前面的注释中所述的内容,请使用performance.now()而不是Date.now()以获得高精度timers@jozenbasin对不起,我没有回答你的问题“我想知道是否有可能将准确度降低到1毫秒”,你从其他人那里得到了很多反馈。我已经撤回了我的反对票,并且将立即撤回我在文档中提到的反对票。不确定是否相关,但在极少数情况下
Date.now()-Date.now()
可以返回-1不,JavaScript或任何非实时系统中不可能有如此高精度的计时器。需要这种精度的东西(如音频计时)必须安排事件。此外,请查看此选项是否有用:如果您只需要一个不漂移的时钟,请查看是否需要1ms的间隔,如果没有实时操作系统,这几乎是不可能的。除了前面的注释中所述的内容外,请使用performance.now()而不是Date.now()高精度timers@jozenbasin很抱歉,我错过了你的问题“我想知道是否有可能将准确度降低到1毫秒”,你从其他人那里得到了很多反馈。我已经撤回了我的反对票,并且将立即撤回文档中提到的我的反对票。不确定是否相关,但在少数情况下
Date.now()-Date.now()
可以返回-1