50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
import { Observable } from '../Observable';
|
|
import { subscribeToResult } from '../util/subscribeToResult';
|
|
import { OuterSubscriber } from '../OuterSubscriber';
|
|
/**
|
|
* We need this JSDoc comment for affecting ESDoc.
|
|
* @extends {Ignored}
|
|
* @hide true
|
|
*/
|
|
export class IfObservable extends Observable {
|
|
constructor(condition, thenSource, elseSource) {
|
|
super();
|
|
this.condition = condition;
|
|
this.thenSource = thenSource;
|
|
this.elseSource = elseSource;
|
|
}
|
|
static create(condition, thenSource, elseSource) {
|
|
return new IfObservable(condition, thenSource, elseSource);
|
|
}
|
|
/** @deprecated internal use only */ _subscribe(subscriber) {
|
|
const { condition, thenSource, elseSource } = this;
|
|
return new IfSubscriber(subscriber, condition, thenSource, elseSource);
|
|
}
|
|
}
|
|
class IfSubscriber extends OuterSubscriber {
|
|
constructor(destination, condition, thenSource, elseSource) {
|
|
super(destination);
|
|
this.condition = condition;
|
|
this.thenSource = thenSource;
|
|
this.elseSource = elseSource;
|
|
this.tryIf();
|
|
}
|
|
tryIf() {
|
|
const { condition, thenSource, elseSource } = this;
|
|
let result;
|
|
try {
|
|
result = condition();
|
|
const source = result ? thenSource : elseSource;
|
|
if (source) {
|
|
this.add(subscribeToResult(this, source));
|
|
}
|
|
else {
|
|
this._complete();
|
|
}
|
|
}
|
|
catch (err) {
|
|
this._error(err);
|
|
}
|
|
}
|
|
}
|
|
//# sourceMappingURL=IfObservable.js.map
|