javascript - setInterval 精确超时

标签 javascript

有没有什么方法可以使函数像 setInterval 一样,但每次超时都完全相同。 在 setInterval 中,超时根据给定的超时而变化,多一点,少一点,但完全相同的情况非常罕见。

例如:

var before = new Date().getTime();
 setInterval(function() {
 var after = new Date().getTime();
 newTab.window.location=someURL;
 console.log((after - before));
 before = after;
}, 50000);

打印 50000、50002、50005、50994、50997、49999、50003、49998 等。 我想一直打印 50000

最佳答案

Javascript 仅在一个流程中执行,因此如果同时有另一个进程在执行某项操作,您的定时器功能总是有可能无法及时执行。

如果您真的需要确切的时间间隔,您可以提前阻止任何其他进程的执行并希望最好:

function setExactInterval(handler, time) {
    var startTime = Date.now();
    setTimeout(function() {
        while (true) {
            var currentTime = Date.now();
            var diff = currentTime - startTime;
            if (diff >= time) {
                setExactInterval(handler, time);
                return handler();
            }
        }
    }, time - 50);
}

如果进程被操作系统阻止,它仍然不准确......

关于javascript - setInterval 精确超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697508/

相关文章:

javascript - 从 Firefox 附加内容脚本复制到剪贴板

javascript - 从 JavaScript 中的 Base64 代码获取图像宽度和高度

javascript - NestJS 是如何匹配注入(inject)目标和注入(inject)实例的?

javascript - 我应该从 Protractor 中 Element 的 getText() promise 分配变量还是返回变量

javascript - Angular.js getElementById() 在 $scope 函数中不起作用

javascript - 如何在 ionic 弹出窗口中使用自动对焦光标

javascript - AngularJS:如何将对象映射到 HTML 属性

javascript - 如何在显示元素后自动显示按钮

javascript - 未触发可排序句柄

javascript - Escape\u200b(零宽度空格)和其他非法 JavaScript 字符