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