Home Manual Reference Source Test Repository

es6/operator/takeUntil.js

import { OuterSubscriber } from '../OuterSubscriber';
import { subscribeToResult } from '../util/subscribeToResult';
/**
 * 发出源 Observable 发出的值,直到 `notifier` Observable 发出值。
 *
 * <span class="informal">它发出源 Observable 的值,然后直到第二个
 * Observable (即 notifier )发出项,它便完成。</span>
 *
 * <img src="./img/takeUntil.png" width="100%">
 *
 * `takeUntil` 订阅并开始镜像源 Observable 。它还监视另外一个 Observable,即你
 * 提供的 `notifier` 。如果 `notifier` 发出值或 `complete` 通知,那么输出 Observable
 * 停止镜像源 Observable ,然后完成。
 *
 * @example <caption>每秒都发出值,直到第一次点击发生</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 该 Observable 第一次发出值会使 `takeUntil` 的
 * 输出 Observable 停止发出由源 Observable 所发出的值。
 * @return {Observable<T>} 该 Observable 发出源 Observable 所发出的值,直到某个
 * 时间点 `notifier` 发出它的第一个值。
 * @method takeUntil
 * @owner Observable
 */
export function takeUntil(notifier) {
    return this.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