| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| exports.retry = void 0; |
| var lift_1 = require("../util/lift"); |
| var OperatorSubscriber_1 = require("./OperatorSubscriber"); |
| var identity_1 = require("../util/identity"); |
| var timer_1 = require("../observable/timer"); |
| var innerFrom_1 = require("../observable/innerFrom"); |
| function retry(configOrCount) { |
| if (configOrCount === void 0) { configOrCount = Infinity; } |
| var config; |
| if (configOrCount && typeof configOrCount === 'object') { |
| config = configOrCount; |
| } |
| else { |
| config = { |
| count: configOrCount, |
| }; |
| } |
| var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b; |
| return count <= 0 |
| ? identity_1.identity |
| : lift_1.operate(function (source, subscriber) { |
| var soFar = 0; |
| var innerSub; |
| var subscribeForRetry = function () { |
| var syncUnsub = false; |
| innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { |
| if (resetOnSuccess) { |
| soFar = 0; |
| } |
| subscriber.next(value); |
| }, undefined, function (err) { |
| if (soFar++ < count) { |
| var resub_1 = function () { |
| if (innerSub) { |
| innerSub.unsubscribe(); |
| innerSub = null; |
| subscribeForRetry(); |
| } |
| else { |
| syncUnsub = true; |
| } |
| }; |
| if (delay != null) { |
| var notifier = typeof delay === 'number' ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(err, soFar)); |
| var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () { |
| notifierSubscriber_1.unsubscribe(); |
| resub_1(); |
| }, function () { |
| subscriber.complete(); |
| }); |
| notifier.subscribe(notifierSubscriber_1); |
| } |
| else { |
| resub_1(); |
| } |
| } |
| else { |
| subscriber.error(err); |
| } |
| })); |
| if (syncUnsub) { |
| innerSub.unsubscribe(); |
| innerSub = null; |
| subscribeForRetry(); |
| } |
| }; |
| subscribeForRetry(); |
| }); |
| } |
| exports.retry = retry; |
| //# sourceMappingURL=retry.js.map |