Runs an interval with variable timeout. Useful for loops adapting to heavy load or other kind of situations.
npm install elastic-loop
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
)
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()
See the License file.