elastic-loop

1.0.0 • Public • Published

Elastic Loop

Build Status Dependency Status devDependency Status

Runs an interval with variable timeout. Useful for loops adapting to heavy load or other kind of situations.

Get Started

npm install elastic-loop

API

loop(function, stress, [options])

Runs function in loop, mutating timeout depending on stress. Returns instance containing end function.

  • function: Interval function. (Function)
  • stress: Function returning bool. (Function)
  • options: optional, but must be an Object if specified, containing zero or more of the following properties:
    • timeout: Default interval timeout in milliseconds. (Number; default: 1000)
    • modifier: Timeout multiplier on stress. (Float; default: 1.20)
    • min: Min stress multiplier. (Number|Float; default: 1)
    • max: Max stress multiplier. (Number|Float; default: 0:infinite)

Usage

const loop = require('elastic-loop')
const busy = require('node-busy')
 
const monitor = busy()
 
// @cycle: current cycle fingerprint
function run (cycle) {
  // → @cycle: { timeout: 1000, stress: 1 }
}
 
function stress () {
  // returns true if overloaded, false otherwise
  return monitor.blocked
}
 
const cycle = loop(run, stress)
 
// cycle.end()
 

License

See the License file.

Package Sidebar

Install

npm i elastic-loop

Weekly Downloads

1

Version

1.0.0

License

MIT

Unpacked Size

6.45 kB

Total Files

6

Last publish

Collaborators

  • grindcode