1 import { async } from '../scheduler/async';
2 import { isDate } from '../util/isDate';
3 import { OuterSubscriber } from '../OuterSubscriber';
4 import { subscribeToResult } from '../util/subscribeToResult';
5 export function timeoutWith(due, withObservable, scheduler = async) {
7 let absoluteTimeout = isDate(due);
8 let waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
9 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
12 class TimeoutWithOperator {
13 constructor(waitFor, absoluteTimeout, withObservable, scheduler) {
14 this.waitFor = waitFor;
15 this.absoluteTimeout = absoluteTimeout;
16 this.withObservable = withObservable;
17 this.scheduler = scheduler;
19 call(subscriber, source) {
20 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
23 class TimeoutWithSubscriber extends OuterSubscriber {
24 constructor(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
26 this.absoluteTimeout = absoluteTimeout;
27 this.waitFor = waitFor;
28 this.withObservable = withObservable;
29 this.scheduler = scheduler;
31 this.scheduleTimeout();
33 static dispatchTimeout(subscriber) {
34 const { withObservable } = subscriber;
35 subscriber._unsubscribeAndRecycle();
36 subscriber.add(subscribeToResult(subscriber, withObservable));
39 const { action } = this;
41 this.action = action.schedule(this, this.waitFor);
44 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
48 if (!this.absoluteTimeout) {
49 this.scheduleTimeout();
55 this.scheduler = null;
56 this.withObservable = null;
59 //# sourceMappingURL=timeoutWith.js.map