UNPKG

rxjs

Version:

Reactive Extensions for modern JavaScript

52 lines 1.84 kB
import { operate } from '../util/lift'; import { EMPTY } from '../observable/empty'; import { OperatorSubscriber } from './OperatorSubscriber'; export function retry(configOrCount) { if (configOrCount === void 0) { configOrCount = Infinity; } var config; if (configOrCount && typeof configOrCount === 'object') { config = configOrCount; } else { config = { count: configOrCount, }; } var count = config.count, _a = config.resetOnSuccess, resetOnSuccess = _a === void 0 ? false : _a; return count <= 0 ? function () { return EMPTY; } : operate(function (source, subscriber) { var soFar = 0; var innerSub; var subscribeForRetry = function () { var syncUnsub = false; innerSub = source.subscribe(new OperatorSubscriber(subscriber, function (value) { if (resetOnSuccess) { soFar = 0; } subscriber.next(value); }, function (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