typed-utilities
Version:
Strongly typed general purpose utilities
33 lines (24 loc) • 944 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.exponentialBackOffDelay = exports.exponentialBackOff = void 0;
var _sleep = require("./sleep");
const exponentialBackOffDelay = (baseInterval, factor, iteration) => iteration === 0 ? 0 : Math.random() * Math.pow(factor, iteration + 1) * baseInterval;
exports.exponentialBackOffDelay = exponentialBackOffDelay;
const exponentialBackOff = async (baseInterval, factor, deadline, fn) => {
for (let iteration = 0; true; iteration++) {
const nextDelay = exponentialBackOffDelay(baseInterval, factor, iteration);
if (Date.now() + nextDelay > deadline) {
return null;
}
await (0, _sleep.sleep)(nextDelay);
const now = Date.now();
const value = await fn(iteration, now);
if (value !== null) {
return value;
}
}
};
exports.exponentialBackOff = exponentialBackOff;
//# sourceMappingURL=exponentialBackOff.js.map