簡體   English   中英

實時時鍾新分鍾執行Javascript函數

[英]Javascript function execution on real time clock new minute

我正在尋找一種在實時時鍾切換到新的分鍾時執行功能的有效(非連續輪詢)方式。 我當前的代碼使用setInterval每60秒調用一次函數-但實際上存在一些滯后,並且平均在大約60.2秒處調用該函數。 這導致了累積的錯誤,該錯誤會累積在我正在開發的過程監控系統中。

是否有人在實時時鍾觸發的定時間隔內有巧妙的代碼調用函數?

編輯:提醒我一種方法來補償錯誤,方法是檢查每次調用該函數的時間,並補償下一次調用的setInterval值。 這使我更接近-但是我真正想要的是一種根據實時時鍾在新的分鍾開始時調用函數的方法...

是的,如果您使用setInterval間隔為1分鍾,則最終會開始漂移,正如您所觀察到的那樣。 但是,您不必連續輪詢:您只需使用鏈接調用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!");
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM