stateful-dynamic-interval
v1.0.1
Published
Stateful Dynterval
Downloads
51
Maintainers
Readme
stateful-dynamic-interval
:clock1: The stateful dynamic interval
A pauseable and resumeable setInterval
built around dynamic-interval
Install
npm install --save stateful-dynamic-interval
then
import setStatefulDynterval from 'stateful-dynamic-interval'
or
import { StatefulDynterval } from 'stateful-dynamic-interval'
Usage
import { StatefulDynterval } from 'stateful-dynamic-interval'
const timer = new StatefulDynterval(context => console.log('tick', context), 1000)
timer.pause()
// ...
timer.resume()
You may also customize the underlying timer and can change the duration of the interval on each tick.
Check out the dynamic-interval
package for more details.
Example
This script doubles the amount of time between intervals on each iteration, starting with 50ms.
import { StatefulDynterval } from 'stateful-dynamic-interval'
const timer = new StatefulDynterval(context => ({ wait: context.wait * 2 }), 50)
setTimeout(() => {
timer.pause()
setTimeout(() => {
// this resumed step will only run for the remaining time in the interval,
// which may be dynamic, meaning it can change on each iteration based on
// the return value of the callback function (this example is dynamic)
timer.resume()
}, 1000)
}, 1000)
Interface
setStatefulDynterval(step, config, api)
step
: The function to call on each interval tickconfig
: Adynamic-interval
configuration objectapi
An optional custom timing API
.run()
Starts the interval. Instantiated StatefulDyntervals
will automatically call run
unless the lazy
config property is set to true
.
- Alias:
play
.clear()
Stops or clears out the interval. Once an interval has been cleared it cannot be resumed.
- Alias:
stop
.pause()
Pauses the interval so that it can be resumed at a later point.
.resume()
Resumes a previously paused interval.
.add(interval)
Synchronizes the parent interval with a child interval.
Child intervals automatically subscribe to the following topics of their parents:
run
clear
pause
resume
.detach()
Desynchronizes a parent interval from all of its children by unsubscribing them from their parent topics.
License
MIT