Javascript函数执行实时时钟新分钟

Javascript function execution on real time clock new minute

本文关键字:分钟 新分钟 函数 执行 实时时钟 Javascript      更新时间:2023-09-26

我正在寻找一种高效(非连续轮询)的方法,以便在实时时钟转到新分钟时执行函数。我当前的代码使用setInterval每60秒调用一次函数——但在实践中存在一些滞后,函数平均在60.2秒左右被调用。这将导致在我正在开发的过程监控系统中累积错误。

有没有人有一个聪明的代码,调用一个函数在实时时钟触发的定期间隔?

编辑:我被提醒到一个方法,通过检查每次调用函数的时间来补偿错误,并为下一次调用补偿setInterval值。这让我更接近——但我真正想要的是一个方法,根据实时时钟在新的一分钟开始时调用一个函数…

是的,如果间隔1分钟使用setInterval,它最终会开始漂移,正如您所观察到的那样。但是,您不必连续轮询:您只需要使用对setTimeout的链式调用。每个人都在与时间赛跑。有时超时是59999,有时是59997,等等。但它将永远与时钟保持同步。

function everyMinuteOnTheMinute() {
    setTimeout(function() {
        var d = new Date();
        console.log(d.getMinutes() + " (" + d.valueOf() % 1000 + ")");
        // your "every minute" code goes here
        everyMinuteOnTheMinute();
    }, 60000 - Date.now() % 60000);
}

您可以通过添加回调将其变为通用实用程序:

function everyMinuteOnTheMinute(cb) {
    setTimeout(function() {
        cb();
        everyMinuteOnTheMinute(cb);
    }, 60000 - Date.now() % 60000);
}

当你有代码时,你需要每分每秒地运行,只需使用实用程序函数:

everyMinuteOnTheMinute(function() {
    console.log("Whee, I'm happening every minute on the minute!");
});