Async recursive JavaScript timers
JavaScript HTML
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.editorconfig
.gitattributes
.gitignore
LICENSE
README.md
often.js
package.json
test.html
test.js

README.md

often

Async recursive timers

npm install often --save
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

.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

var often = require('often')

often(function() {
  console.log(new Date)
  if ('someCondition') {
    this.done()
  }
}).wait(1000).start()

Limit attempts

var often = require('often')

often(function() {
  console.info(this)
  if (this._trial === 3) {
    this.stop()
    console.warn(this)
  }
}).start(1000).wait(200)

Decay task

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

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

git clone https://github.com/ryanve/often.git
cd often
npm install
npm test

License

MIT