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

34 lines 4.27 kB
import { range, throwError, timer, zip, } from 'rxjs'; import { mergeMap, retryWhen, } from 'rxjs/operators'; import { exponentialBackoffDelayCalculator } from './delay-calculator'; const DEFAULT_RETRY_COUNT = 3; /** * Return the difference in time in words * * @param options - The options object * - `retries`: How many times it should retry before throwing an error * - `delayCalculator`: The calculator to determine the delay timing * @returns The observable timer * * @example * return this.exampleDatabase.getSomething() * .pipe( * map((res: MyResponse) => { * if (res) { * return res; * } else { * return null; * } * }), * retryWithBackoff({}), // Using default options * ) * ; */ export const retryWithBackoff = ({ retries = DEFAULT_RETRY_COUNT, delayCalculator = exponentialBackoffDelayCalculator({}), }) => retryWhen(errors => zip(errors, range(1, retries)) .pipe(mergeMap(([err, retry]) => { if (retry >= retries) { return throwError(err); } return timer(delayCalculator(retry)); }))); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktd2l0aC1iYWNrb2ZmLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy91dGlsaXRpZXMvIiwic291cmNlcyI6WyJyZXRyeS13aXRoLWJhY2tvZmYvcmV0cnktd2l0aC1iYWNrb2ZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLEtBQUssRUFDTCxHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBV3ZFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBRzlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFJLEVBQ2xDLE9BQU8sR0FBRyxtQkFBbUIsRUFDN0IsZUFBZSxHQUFHLGlDQUFpQyxDQUFDLEVBQUUsQ0FBQyxHQUM3QixFQUErQixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUNqRixNQUFNLEVBQ04sS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDbEI7S0FDRSxJQUFJLENBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtJQUN4QixJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7UUFDcEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEI7SUFDRCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMsQ0FDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sXG4gIHJhbmdlLFxuICB0aHJvd0Vycm9yLFxuICB0aW1lcixcbiAgemlwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1lcmdlTWFwLFxuICByZXRyeVdoZW4sXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZXhwb25lbnRpYWxCYWNrb2ZmRGVsYXlDYWxjdWxhdG9yIH0gZnJvbSAnLi9kZWxheS1jYWxjdWxhdG9yJztcblxuXG4vKipcbiAqIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYHJldHJ5V2l0aEJhY2tvZmZgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlXaXRoQmFja29mZiB7XG4gIHJldHJpZXM6IG51bWJlcjtcbiAgZGVsYXlDYWxjdWxhdG9yOiAoYXR0ZW1wdDogbnVtYmVyKSA9PiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVUUllfQ09VTlQgPSAzO1xuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGluIHRpbWUgaW4gd29yZHNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICogICAtIGByZXRyaWVzYDogSG93IG1hbnkgdGltZXMgaXQgc2hvdWxkIHJldHJ5IGJlZm9yZSB0aHJvd2luZyBhbiBlcnJvclxuICogICAtIGBkZWxheUNhbGN1bGF0b3JgOiBUaGUgY2FsY3VsYXRvciB0byBkZXRlcm1pbmUgdGhlIGRlbGF5IHRpbWluZ1xuICogQHJldHVybnMgVGhlIG9ic2VydmFibGUgdGltZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIHRoaXMuZXhhbXBsZURhdGFiYXNlLmdldFNvbWV0aGluZygpXG4gKiAgIC5waXBlKFxuICogICAgIG1hcCgocmVzOiBNeVJlc3BvbnNlKSA9PiB7XG4gKiAgICAgICBpZiAocmVzKSB7XG4gKiAgICAgICAgIHJldHVybiByZXM7XG4gKiAgICAgICB9IGVsc2Uge1xuICogICAgICAgICByZXR1cm4gbnVsbDtcbiAqICAgICAgIH1cbiAqICAgICB9KSxcbiAqICAgICByZXRyeVdpdGhCYWNrb2ZmKHt9KSwgLy8gVXNpbmcgZGVmYXVsdCBvcHRpb25zXG4gKiAgIClcbiAqIDtcbiAqL1xuZXhwb3J0IGNvbnN0IHJldHJ5V2l0aEJhY2tvZmYgPSA8VD4oe1xuICByZXRyaWVzID0gREVGQVVMVF9SRVRSWV9DT1VOVCxcbiAgZGVsYXlDYWxjdWxhdG9yID0gZXhwb25lbnRpYWxCYWNrb2ZmRGVsYXlDYWxjdWxhdG9yKHt9KSxcbn06IFBhcnRpYWw8UmV0cnlXaXRoQmFja29mZj4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4gPT4gcmV0cnlXaGVuKGVycm9ycyA9PiB6aXAoXG4gICAgZXJyb3JzLFxuICAgIHJhbmdlKDEsIHJldHJpZXMpLFxuICApXG4gICAgLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoW2VyciwgcmV0cnldKSA9PiB7XG4gICAgICAgIGlmIChyZXRyeSA+PSByZXRyaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZXIoZGVsYXlDYWxjdWxhdG9yKHJldHJ5KSk7XG4gICAgICB9KSxcbiAgICApKTtcbiJdfQ==