https://github.com/ryanve/often
Async recursive JavaScript timers
https://github.com/ryanve/often
async-recursive-timers javascript timers
Last synced: 11 months ago
JSON representation
Async recursive JavaScript timers
- Host: GitHub
- URL: https://github.com/ryanve/often
- Owner: ryanve
- License: mit
- Created: 2016-09-29T05:13:00.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2016-10-25T02:12:13.000Z (over 9 years ago)
- Last Synced: 2025-03-15T21:51:22.844Z (over 1 year ago)
- Topics: async-recursive-timers, javascript, timers
- Language: JavaScript
- Homepage: https://npm.im/often
- Size: 7.81 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# often
Async recursive timers
```sh
npm install often --save
```
```sh
var often = require('often')
```
## API
### `often(fn=undefined)`
- Get an `often` instance with `fn` as recursion function
- All methods are chainable
### `.wait(ms=0)`
Set interval to wait between recursions
### `.start(ms=0)`
Start recursing after optional ms delay
### `.stop()`
Immediately stop recursing
### `.done()`
Immediately stop recursing and void instance
### `.use(fn=undefined)`
Replace the recursion function
### `.clear()` **internal**
Clear active timer
### `.clean()` **internal**
Nullify [properties](#properties)
### `.init(fn=undefined)` **internal**
Initialize instance
### Properties
- `._function`: `fn`|null
- `._recur`: boolean|null
- `._timer`: integer|null
- `._trial`: integer|null
- `._wait`: `ms`|null
## Examples
### Poll condition
```js
var often = require('often')
often(function() {
console.log(new Date)
if ('someCondition') {
this.done()
}
}).wait(1000).start()
```
### Limit attempts
```js
var often = require('often')
often(function() {
console.info(this)
if (this._trial === 3) {
this.stop()
console.warn(this)
}
}).start(1000).wait(200)
```
### Decay task
```js
var often = require('often')
often(function() {
if ('Not Ready Yet') {
this.wait(1000 + this._wait)
console.info('Slowing down')
} else {
console.info('Ready!')
}
}).start()
```
### Heartbeat
```js
var often = require('often')
var energy = require('energy')
var emitter = energy()
var heartbeat = often(function() {
emitter.emit('heartbeat')
}).wait(1000).start()
emitter.on('heartbeat', function() {
console.log('I run every second')
})
```
## Develop
```sh
git clone https://github.com/ryanve/often.git
cd often
npm install
npm test
```
## License
MIT