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
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;
|
|
}
|
|
};
|
|
};
|