import { innerFrom } from '../observable/innerFrom'; import { Subject } from '../Subject'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; export function retryWhen(notifier) { return operate(function (source, subscriber) { var innerSub; var syncResub = false; var errors$; var subscribeForRetryWhen = function () { innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) { if (!errors$) { errors$ = new Subject(); innerFrom(notifier(errors$)).subscribe(createOperatorSubscriber(subscriber, function () { return innerSub ? subscribeForRetryWhen() : (syncResub = true); })); } if (errors$) { errors$.next(err); } })); if (syncResub) { innerSub.unsubscribe(); innerSub = null; syncResub = false; subscribeForRetryWhen(); } }; subscribeForRetryWhen(); }); } //# sourceMappingURL=retryWhen.js.map