Home Manual Reference Source Test Repository

es6/operator/combineAll.js

import { CombineLatestOperator } from './combineLatest';
/**
 * 通过等待外部 Observable 完成然后应用 {@link combineLatest} ,将高阶 Observable 转化为一阶 Observable。
 *
 * <span class="informal">当高阶 Observable 完成时,通过使用 {@link combineLatest} 将其打平。</span>
 *
 * <img src="./img/combineAll.png" width="100%">
 *
 * 接受一个返回 Observables 的 Observable, 并从中收集所有的 Observables 。 一旦最外部的
 * Observable 完成, 会订阅所有收集的 Observables 然后通过{@link combineLatest}合并值,
 *  这样:
 * - 每次内部 Observable 发出的时候, 外部 Observable 也发出。
 * - 当返回的 observable 发出的时候, 它会通过如下方式发出所有最新的值:
 *   - 如果提供了`project`函数, 该函数会按内部 Observable 到达的顺序依次使用每个内部 Observable 的最新值进行调用。
 *   - 如果没有提供`project`函数, 包含所有最新数据的数组会被输出 Observable 发出。
 *
 * @example <caption>将两个点击事件映射为有限的 interval Observable,然后应用 combineAll</caption>
 * var clicks = Rx.Observable.fromEvent(document, 'click');
 * var higherOrder = clicks.map(ev =>
 *   Rx.Observable.interval(Math.random()*2000).take(3)
 * ).take(2);
 * var result = higherOrder.combineAll();
 * result.subscribe(x => console.log(x));
 *
 * @see {@link combineLatest}
 * @see {@link mergeAll}
 *
 * @param {function} [project] 它按顺序的从每个收集到的内部 Observable 中接收最新值作为参数。
 * @return {Observable} 该 Observable 为最新值的投射结果或数组。
 * @method combineAll
 * @owner Observable
 */
export function combineAll(project) {
    return this.lift(new CombineLatestOperator(project));
}
//# sourceMappingURL=combineAll.js.map