https://github.com/slurmulon/stateful-dynamic-interval
:clock1: The stateful dynamic interval
https://github.com/slurmulon/stateful-dynamic-interval
clock interval iteration setinterval stateful step time wait
Last synced: about 1 month ago
JSON representation
:clock1: The stateful dynamic interval
- Host: GitHub
- URL: https://github.com/slurmulon/stateful-dynamic-interval
- Owner: slurmulon
- License: mit
- Created: 2017-08-31T08:04:20.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-02-11T00:28:57.000Z (about 3 years ago)
- Last Synced: 2025-03-18T14:11:29.704Z (about 1 month ago)
- Topics: clock, interval, iteration, setinterval, stateful, step, time, wait
- Language: JavaScript
- Homepage:
- Size: 167 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stateful-dynamic-interval
> :clock1: The stateful dynamic interval
---[](https://circleci.com/gh/slurmulon/stateful-dynamic-interval)
[](https://npmjs.com/package/stateful-dynamic-interval)A pauseable and resumeable `setInterval` built around [dynamic-interval](https://github.com/slurmulon/dynamic-interval)
## Install
`npm install --save stateful-dynamic-interval`
then
```js
import setStatefulDynterval from 'stateful-dynamic-interval'
```or
```js
import { StatefulDynterval } from 'stateful-dynamic-interval'
```## Usage
```js
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](https://github.com/slurmulon/dynamic-interval#advanced) for more details.
## Example
This script doubles the amount of time between intervals on each iteration, starting with 50ms.
```js
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 tick
- `config`: A [`dynamic-interval` configuration object](https://github.com/slurmulon/dynamic-interval#config)
- `api` An optional custom [timing API](https://github.com/slurmulon/dynamic-interval#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