1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { OuterSubscriber } from '../OuterSubscriber';
- import { subscribeToResult } from '../util/subscribeToResult';
- /**
- * Emits the values emitted by the source Observable until a `notifier`
- * Observable emits a value.
- *
- * <span class="informal">Lets values pass until a second Observable,
- * `notifier`, emits something. Then, it completes.</span>
- *
- * <img src="./img/takeUntil.png" width="100%">
- *
- * `takeUntil` subscribes and begins mirroring the source Observable. It also
- * monitors a second Observable, `notifier` that you provide. If the `notifier`
- * emits a value or a complete notification, the output Observable stops
- * mirroring the source Observable and completes.
- *
- * @example <caption>Tick every second until the first click happens</caption>
- * var interval = Rx.Observable.interval(1000);
- * var clicks = Rx.Observable.fromEvent(document, 'click');
- * var result = interval.takeUntil(clicks);
- * result.subscribe(x => console.log(x));
- *
- * @see {@link take}
- * @see {@link takeLast}
- * @see {@link takeWhile}
- * @see {@link skip}
- *
- * @param {Observable} notifier The Observable whose first emitted value will
- * cause the output Observable of `takeUntil` to stop emitting values from the
- * source Observable.
- * @return {Observable<T>} An Observable that emits the values from the source
- * Observable until such time as `notifier` emits its first value.
- * @method takeUntil
- * @owner Observable
- */
- export function takeUntil(notifier) {
- return (source) => source.lift(new TakeUntilOperator(notifier));
- }
- class TakeUntilOperator {
- constructor(notifier) {
- this.notifier = notifier;
- }
- call(subscriber, source) {
- return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));
- }
- }
- /**
- * We need this JSDoc comment for affecting ESDoc.
- * @ignore
- * @extends {Ignored}
- */
- class TakeUntilSubscriber extends OuterSubscriber {
- constructor(destination, notifier) {
- super(destination);
- this.notifier = notifier;
- this.add(subscribeToResult(this, notifier));
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.complete();
- }
- notifyComplete() {
- // noop
- }
- }
- //# sourceMappingURL=takeUntil.js.map
|