UNPKG

rxjs

Version:

Reactive Extensions for modern JavaScript

51 lines 1.7 kB
import { operate } from '../util/lift'; import { EMPTY } from '../observable/empty'; import { OperatorSubscriber } from './OperatorSubscriber'; export function retry(configOrCount = Infinity) { let config; if (configOrCount && typeof configOrCount === 'object') { config = configOrCount; } else { config = { count: configOrCount, }; } const { count, resetOnSuccess = false } = config; return count <= 0 ? () => EMPTY : operate((source, subscriber) => { let soFar = 0; let innerSub; const subscribeForRetry = () => { let syncUnsub = false; innerSub = source.subscribe(new OperatorSubscriber(subscriber, (value) => { if (resetOnSuccess) { soFar = 0; } subscriber.next(value); }, (err) => { if (soFar++ < count) { if (innerSub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } else { syncUnsub = true; } } else { subscriber.error(err); } })); if (syncUnsub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } }; subscribeForRetry(); }); } //# sourceMappingURL=retry.js.map