Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accurately run a function when the minute changes?

Tags:

How could I accurately run a function when the minute changes? Using a setInterval could work if I trigger it right when the minute changes. But I'm worried setInterval could get disrupted by the event-loop in a long-running process and not stay in sync with the clock.

How can I run a function accurately when the minute changes?

like image 697
fancy Avatar asked May 29 '12 07:05

fancy


1 Answers

First off, you should use setInterval for repeating timers, since it (tries to) guarantee periodic execution, i.e. any potential delays will not stack up as they will with repeated setTimeout calls. This will execute your function every minute:

var ONE_MINUTE = 60 * 1000;  function showTime() {   console.log(new Date()); }  setInterval(showTime, ONE_MINUTE); 

Now, what we need to do is to start this at the exact right time:

function repeatEvery(func, interval) {     // Check current time and calculate the delay until next interval     var now = new Date(),         delay = interval - now % interval;      function start() {         // Execute function now...         func();         // ... and every interval         setInterval(func, interval);     }      // Delay execution until it's an even interval     setTimeout(start, delay); }  repeatEvery(showTime, ONE_MINUTE); 
like image 54
Linus Thiel Avatar answered Oct 16 '22 23:10

Linus Thiel