"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.retryWhen = void 0; var innerFrom_1 = require("../observable/innerFrom"); var Subject_1 = require("../Subject"); var lift_1 = require("../util/lift"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function retryWhen(notifier) { return lift_1.operate(function (source, subscriber) { var innerSub; var syncResub = false; var errors$; var subscribeForRetryWhen = function () { innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, undefined, function (err) { if (!errors$) { errors$ = new Subject_1.Subject(); innerFrom_1.innerFrom(notifier(errors$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () { return innerSub ? subscribeForRetryWhen() : (syncResub = true); })); } if (errors$) { errors$.next(err); } })); if (syncResub) { innerSub.unsubscribe(); innerSub = null; syncResub = false; subscribeForRetryWhen(); } }; subscribeForRetryWhen(); }); } exports.retryWhen = retryWhen; //# sourceMappingURL=retryWhen.js.map