You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
614 B
JavaScript

"use strict";
// TODO: Make separate package
const pTry = require("p-try");
module.exports = function pInterval(interval, handler) {
let timer = setTimeout(doHandler, interval);
function doHandler() {
let startTime = Date.now();
pTry(() => {
return handler();
}).then(() => {
let timeElapsed = Date.now() - startTime();
let timeout = (timeElapsed < interval)
? interval - timeElapsed
: 1; // Be consistently async!
timer = setTimeout(doHandler, timeout);
});
}
return function cancelInterval() {
if (timer != null) {
clearTimeout(timer);
timer = null;
}
};
};