1 import { Subject } from '../Subject';
2 import { OuterSubscriber } from '../OuterSubscriber';
3 import { subscribeToResult } from '../util/subscribeToResult';
4 export function retryWhen(notifier) {
5 return (source) => source.lift(new RetryWhenOperator(notifier, source));
7 class RetryWhenOperator {
8 constructor(notifier, source) {
9 this.notifier = notifier;
12 call(subscriber, source) {
13 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
16 class RetryWhenSubscriber extends OuterSubscriber {
17 constructor(destination, notifier, source) {
19 this.notifier = notifier;
23 if (!this.isStopped) {
24 let errors = this.errors;
25 let retries = this.retries;
26 let retriesSubscription = this.retriesSubscription;
28 errors = new Subject();
30 const { notifier } = this;
31 retries = notifier(errors);
34 return super.error(e);
36 retriesSubscription = subscribeToResult(this, retries);
40 this.retriesSubscription = null;
42 this._unsubscribeAndRecycle();
44 this.retries = retries;
45 this.retriesSubscription = retriesSubscription;
50 const { errors, retriesSubscription } = this;
55 if (retriesSubscription) {
56 retriesSubscription.unsubscribe();
57 this.retriesSubscription = null;
61 notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
62 const { _unsubscribe } = this;
63 this._unsubscribe = null;
64 this._unsubscribeAndRecycle();
65 this._unsubscribe = _unsubscribe;
66 this.source.subscribe(this);
69 //# sourceMappingURL=retryWhen.js.map