We all know the drawbacks of the built-in setInterval
in Node.js(actually js itself).
It's more reasonable to start measuring period after every async task gets done. So here it is.
$ npm i setinterval
const Timer = require('setinterval');
const t = new Timer(async () => {
const user = await db.User.get(id);
console.log(user);
}, 1000);
// start timer
t.setInterval();
// after some time...
// clear timer
t.clearInterval();
Timer constructor.
Params:
- fn(required): function executed after every
period
. Should be a Promise or async function or generator function or thunk. - period(required): timer period(units: milliseconds).
Start timer after a certain delay(defaults to 0) and can decide if invoke immediately(defaults to false).
Params:
- initialDelay(optional): Delay period(units: milliseconds) before timer gets triggered. default: 0
- invokeImmediate(optional): specify if the timer function invoke immediately.default: false
Stop timer(can be restart again).
Triggered each time fn is finished, whenever a error is thrown. You can cancel the timer in this event. A count
parameter is passed in the event handler which stands for how many times fn has been called.
timer.on('tick', count => {
timer.clearInterval();
});
Triggered when error thrown from fn.
timer.on('error', e => {
logger.info(e.stack);
});
MIT