UNPKG

@terminus/ngx-tools

Version:

[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github

37 lines 4.65 kB
var DEFAULT_JITTER_FACTOR = .3; var DEFAULT_BACK_OFF_TIME = 2; var DEFAULT_BASE_WAIT_TIME = 100; /** * Calculate retry timing * * `jitter`: "Slight irregular movement, variation, or unsteadiness, * especially in an electrical signal or electronic device" * * @param options - The options object * - `jitter`: If the duration should be affected by a jitter effect * - `jitterFactor`: How widely the jitter effect should vary * - `backOffFactor`: How quickly the duration should back off * - `baseWaitTime`: The base time when determining sleep duration * @returns The duration to sleep * * @example * const calcOpts: DelayCalculator = { * jitter: true, * jitterFactor: .3, * backOffFactor: 2, * baseWaitTime: 100, * } * // Create a retrier with a custom backoff * retryWithBackoff({retries: 3, delayCalculator: exponentialBackoffDelayCalculator(calcOpts)}) */ export var exponentialBackoffDelayCalculator = function (_a) { var _b = _a.jitter, jitter = _b === void 0 ? true : _b, _c = _a.jitterFactor, jitterFactor = _c === void 0 ? DEFAULT_JITTER_FACTOR : _c, _d = _a.backOffFactor, backOffFactor = _d === void 0 ? DEFAULT_BACK_OFF_TIME : _d, _e = _a.baseWaitTime, baseWaitTime = _e === void 0 ? DEFAULT_BASE_WAIT_TIME : _e; return function (attempt) { var sleepDuration = baseWaitTime * Math.pow(backOffFactor, attempt); if (jitter) { sleepDuration *= (1 - (jitterFactor * Math.random())); } return sleepDuration; }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXktY2FsY3VsYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0ZXJtaW51cy9uZ3gtdG9vbHMvdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsicmV0cnktd2l0aC1iYWNrb2ZmL2RlbGF5LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsSUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDakMsSUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDaEMsSUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFHbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLENBQUMsSUFBTSxpQ0FBaUMsR0FBRyxVQUFDLEVBS3ZCO1FBSnpCLGNBQWEsRUFBYixrQ0FBYSxFQUNiLG9CQUFvQyxFQUFwQyx5REFBb0MsRUFDcEMscUJBQXFDLEVBQXJDLDBEQUFxQyxFQUNyQyxvQkFBcUMsRUFBckMsMERBQXFDO0lBQ1AsT0FBQSxVQUFTLE9BQWU7UUFDdEQsSUFBSSxhQUFhLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLElBQUksTUFBTSxFQUFFO1lBQ1YsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0FBUitCLENBUS9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBhbGxvd2VkIG9wdGlvbnMgb2JqZWN0IGZvciBgZXhwb25lbnRpYWxCYWNrb2ZmRGVsYXlDYWxjdWxhdG9yYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbGF5Q2FsY3VsYXRvciB7XG4gIGppdHRlcjogYm9vbGVhbjtcbiAgaml0dGVyRmFjdG9yOiBudW1iZXI7XG4gIGJhY2tPZmZGYWN0b3I6IG51bWJlcjtcbiAgYmFzZVdhaXRUaW1lOiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfSklUVEVSX0ZBQ1RPUiA9IC4zO1xuY29uc3QgREVGQVVMVF9CQUNLX09GRl9USU1FID0gMjtcbmNvbnN0IERFRkFVTFRfQkFTRV9XQUlUX1RJTUUgPSAxMDA7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGUgcmV0cnkgdGltaW5nXG4gKlxuICogYGppdHRlcmA6IFwiU2xpZ2h0IGlycmVndWxhciBtb3ZlbWVudCwgdmFyaWF0aW9uLCBvciB1bnN0ZWFkaW5lc3MsXG4gKiBlc3BlY2lhbGx5IGluIGFuIGVsZWN0cmljYWwgc2lnbmFsIG9yIGVsZWN0cm9uaWMgZGV2aWNlXCJcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICogICAtIGBqaXR0ZXJgOiBJZiB0aGUgZHVyYXRpb24gc2hvdWxkIGJlIGFmZmVjdGVkIGJ5IGEgaml0dGVyIGVmZmVjdFxuICogICAtIGBqaXR0ZXJGYWN0b3JgOiBIb3cgd2lkZWx5IHRoZSBqaXR0ZXIgZWZmZWN0IHNob3VsZCB2YXJ5XG4gKiAgIC0gYGJhY2tPZmZGYWN0b3JgOiBIb3cgcXVpY2tseSB0aGUgZHVyYXRpb24gc2hvdWxkIGJhY2sgb2ZmXG4gKiAgIC0gYGJhc2VXYWl0VGltZWA6IFRoZSBiYXNlIHRpbWUgd2hlbiBkZXRlcm1pbmluZyBzbGVlcCBkdXJhdGlvblxuICogQHJldHVybnMgVGhlIGR1cmF0aW9uIHRvIHNsZWVwXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNhbGNPcHRzOiBEZWxheUNhbGN1bGF0b3IgPSB7XG4gKiAgIGppdHRlcjogdHJ1ZSxcbiAqICAgaml0dGVyRmFjdG9yOiAuMyxcbiAqICAgYmFja09mZkZhY3RvcjogMixcbiAqICAgYmFzZVdhaXRUaW1lOiAxMDAsXG4gKiB9XG4gKiAvLyBDcmVhdGUgYSByZXRyaWVyIHdpdGggYSBjdXN0b20gYmFja29mZlxuICogcmV0cnlXaXRoQmFja29mZih7cmV0cmllczogMywgZGVsYXlDYWxjdWxhdG9yOiBleHBvbmVudGlhbEJhY2tvZmZEZWxheUNhbGN1bGF0b3IoY2FsY09wdHMpfSlcbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9uZW50aWFsQmFja29mZkRlbGF5Q2FsY3VsYXRvciA9ICh7XG4gIGppdHRlciA9IHRydWUsXG4gIGppdHRlckZhY3RvciA9IERFRkFVTFRfSklUVEVSX0ZBQ1RPUixcbiAgYmFja09mZkZhY3RvciA9IERFRkFVTFRfQkFDS19PRkZfVElNRSxcbiAgYmFzZVdhaXRUaW1lID0gREVGQVVMVF9CQVNFX1dBSVRfVElNRSxcbn06IFBhcnRpYWw8RGVsYXlDYWxjdWxhdG9yPikgPT4gZnVuY3Rpb24oYXR0ZW1wdDogbnVtYmVyKSB7XG4gIGxldCBzbGVlcER1cmF0aW9uID0gYmFzZVdhaXRUaW1lICogTWF0aC5wb3coYmFja09mZkZhY3RvciwgYXR0ZW1wdCk7XG5cbiAgaWYgKGppdHRlcikge1xuICAgIHNsZWVwRHVyYXRpb24gKj0gKDEgLSAoaml0dGVyRmFjdG9yICogTWF0aC5yYW5kb20oKSkpO1xuICB9XG5cbiAgcmV0dXJuIHNsZWVwRHVyYXRpb247XG59O1xuIl19