source: trip-planner-front/node_modules/rxjs/_esm2015/internal/operators/delayWhen.js@ 6a3a178

Last change on this file since 6a3a178 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 3.8 KB
Line 
1import { Subscriber } from '../Subscriber';
2import { Observable } from '../Observable';
3import { OuterSubscriber } from '../OuterSubscriber';
4import { subscribeToResult } from '../util/subscribeToResult';
5export function delayWhen(delayDurationSelector, subscriptionDelay) {
6 if (subscriptionDelay) {
7 return (source) => new SubscriptionDelayObservable(source, subscriptionDelay)
8 .lift(new DelayWhenOperator(delayDurationSelector));
9 }
10 return (source) => source.lift(new DelayWhenOperator(delayDurationSelector));
11}
12class DelayWhenOperator {
13 constructor(delayDurationSelector) {
14 this.delayDurationSelector = delayDurationSelector;
15 }
16 call(subscriber, source) {
17 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
18 }
19}
20class DelayWhenSubscriber extends OuterSubscriber {
21 constructor(destination, delayDurationSelector) {
22 super(destination);
23 this.delayDurationSelector = delayDurationSelector;
24 this.completed = false;
25 this.delayNotifierSubscriptions = [];
26 this.index = 0;
27 }
28 notifyNext(outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
29 this.destination.next(outerValue);
30 this.removeSubscription(innerSub);
31 this.tryComplete();
32 }
33 notifyError(error, innerSub) {
34 this._error(error);
35 }
36 notifyComplete(innerSub) {
37 const value = this.removeSubscription(innerSub);
38 if (value) {
39 this.destination.next(value);
40 }
41 this.tryComplete();
42 }
43 _next(value) {
44 const index = this.index++;
45 try {
46 const delayNotifier = this.delayDurationSelector(value, index);
47 if (delayNotifier) {
48 this.tryDelay(delayNotifier, value);
49 }
50 }
51 catch (err) {
52 this.destination.error(err);
53 }
54 }
55 _complete() {
56 this.completed = true;
57 this.tryComplete();
58 this.unsubscribe();
59 }
60 removeSubscription(subscription) {
61 subscription.unsubscribe();
62 const subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
63 if (subscriptionIdx !== -1) {
64 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
65 }
66 return subscription.outerValue;
67 }
68 tryDelay(delayNotifier, value) {
69 const notifierSubscription = subscribeToResult(this, delayNotifier, value);
70 if (notifierSubscription && !notifierSubscription.closed) {
71 const destination = this.destination;
72 destination.add(notifierSubscription);
73 this.delayNotifierSubscriptions.push(notifierSubscription);
74 }
75 }
76 tryComplete() {
77 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
78 this.destination.complete();
79 }
80 }
81}
82class SubscriptionDelayObservable extends Observable {
83 constructor(source, subscriptionDelay) {
84 super();
85 this.source = source;
86 this.subscriptionDelay = subscriptionDelay;
87 }
88 _subscribe(subscriber) {
89 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
90 }
91}
92class SubscriptionDelaySubscriber extends Subscriber {
93 constructor(parent, source) {
94 super();
95 this.parent = parent;
96 this.source = source;
97 this.sourceSubscribed = false;
98 }
99 _next(unused) {
100 this.subscribeToSource();
101 }
102 _error(err) {
103 this.unsubscribe();
104 this.parent.error(err);
105 }
106 _complete() {
107 this.unsubscribe();
108 this.subscribeToSource();
109 }
110 subscribeToSource() {
111 if (!this.sourceSubscribed) {
112 this.sourceSubscribed = true;
113 this.unsubscribe();
114 this.source.subscribe(this.parent);
115 }
116 }
117}
118//# sourceMappingURL=delayWhen.js.map
Note: See TracBrowser for help on using the repository browser.