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