UNPKG

intrvl

Version:

Lightweight, efficient extension of the interval API

39 lines (30 loc) 1.04 kB
var util = require('util'); var EventEmitter = require('events').EventEmitter; function Intrvl(toExec, intervalMillis, timeoutMillis, maxExec) { var self = this; var execCount = 0; var interval = setInterval(exec, intervalMillis); var timeout; if(timeoutMillis && timeoutMillis > 0) { timeout = setTimeout(function(){ self.stop(); }, timeoutMillis); } function exec() { // if(maxExec && execCount >= maxExec) return; if(toExec) toExec(); execCount++; self.emit('exec', execCount); if(maxExec && execCount >= maxExec) self.stop(); } this.stop = function() { if(!interval) return; // not running if(interval) clearInterval(interval); if(timeout) clearTimeout(timeout); self.emit('stop', execCount); } } util.inherits(Intrvl, EventEmitter); module.exports = { setIntrvl : function(toExec, intervalMillis, timeoutMillis, maxExec) { return new Intrvl(toExec, intervalMillis, timeoutMillis, maxExec); } };