top-of-second-ticker v0.1.3
top-of-second-ticker
Schedule your callback function to be run every second, close to when the system clock changes.
This relies on the setTimeout() global function.
Install
npm install top-of-second-ticker --saveSummary
This package exposes a single class with five methods: start(callback), pause(), resume(), stop(), getIsRunning().
Example
import TopOfSecondTicker from 'top-of-second-ticker'
const ticker = new TopOfSecondTicker()
// start immediately
ticker.start((scheduledDate) => {
console.log('ran', schdeuledDate)
})
// stop after ten seconds
setTimeout(ticker.stop, 10 * 1000)
// pause when the browser becomes inactive
document.addEventListener('visibilitychange', (_) => {
if (document.visibilityState === 'visible')
ticker.resume()
else
ticker.pause()
})Guide
Constructor takes no arguments.
.start(callback, shouldExecuteCallbackImmediately = true)callbackis your function to be executed repeatedly. It will be passed one argument: aDateobject for when this class intended to execute the callback (at the top of the second). Thus, the date's.valueOf()(in milliseconds) will be divisible by 1000. IfshouldExecuteCallbackImmediatelyistrue(the default, see explanation below), the first timecallbackis executed, its date will beundefined.Note: The actual exact time that
callbackis executed will be some number of milliseconds after the intended Date. If your code runs smoothly, this delay should be imperceptible to the user. For reference, seesetTimeout()'s Reasons for delays longer than specifiedIf
shouldExecuteCallbackImmediatelyisfalse,callbackwill not be executed until the top of the next second.If
.start(...)is called multiple times on the same ticker instance, the previouscallbacks are forgotten. Only the most recentcallbackwill continue to execute repeatedly..pause()takes no arguments.When paused, the most recent
callbackis still remembered, so you can easily call.resume()again to continue execution..resume(shouldExecuteCallbackImmediately = true)shouldExecuteCallbackImmediatelybehaves just like the argument to.start(...)above.This returns
trueif acallbackwas still remembered and either just executed (immediately), or will execute at the top of the next second..stop()takes no arguments.Once stopped, the
callbackis forgotten, andresume()has no effect (until you call.start(...)again)..getIsRunning()will return false if stopped or paused.