具有精确超时的setInterval

Hri*_*o93 5 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);
Run Code Online (Sandbox Code Playgroud)

打印50000,50002,50005,50994,50997,49999,50003,49998等.我想要打印50000

Max*_*nko 3

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);
}
Run Code Online (Sandbox Code Playgroud)

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