@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
42 lines (41 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Backoff = void 0;
var Backoff = /** @class */ (function () {
/**
* Schedule function calls with exponential backoff
*/
function Backoff(cb, baseMillis, maxMillis) {
this.baseMillis = Backoff.__TEST__BASE_MILLIS || baseMillis || Backoff.DEFAULT_BASE_MILLIS;
this.maxMillis = Backoff.__TEST__MAX_MILLIS || maxMillis || Backoff.DEFAULT_MAX_MILLIS;
this.attempts = 0;
this.cb = cb;
}
/**
* Schedule a next call to `cb`
* @returns scheduled delay in milliseconds
*/
Backoff.prototype.scheduleCall = function () {
var _this = this;
var delayInMillis = Math.min(this.baseMillis * Math.pow(2, this.attempts), this.maxMillis);
if (this.timeoutID)
clearTimeout(this.timeoutID);
this.timeoutID = setTimeout(function () {
_this.timeoutID = undefined;
_this.cb();
}, delayInMillis);
this.attempts++;
return delayInMillis;
};
Backoff.prototype.reset = function () {
this.attempts = 0;
if (this.timeoutID) {
clearTimeout(this.timeoutID);
this.timeoutID = undefined;
}
};
Backoff.DEFAULT_BASE_MILLIS = 1000; // 1 second
Backoff.DEFAULT_MAX_MILLIS = 1800000; // 30 minutes
return Backoff;
}());
exports.Backoff = Backoff;