Home Manual Reference Source Test Repository

es6/operator/concatAll.js

import { MergeAllOperator } from './mergeAll';
/* tslint:enable:max-line-length */
/**
 * 通过顺序地连接内部 Observable,将高阶 Observable 转化为一阶 Observable 。
 *
 * <span class="informal">通过一个接一个的连接内部 Observable ,将高阶 Observable 打平。</span>
 *
 * <img src="./img/concatAll.png" width="100%">
 *
 * 串行连接源(高阶 Observable)所发出的每个 Observable,只有当一个内部 Observable 完成的时候才订阅下
 * 一个内部 Observable,并将它们的所有值合并到返回的 Observable 中。
 *
 * 警告: 如果源 Observable 很快并且不停的发送 Observables, 内部 Observables 发送的完成
 * 通知比源 Observable 慢, 你会遇到内存问题,因为传入的 Observables 在无界缓冲区中收集.
 *
 * 注意: concatAll 等价于 concurrency 参数(最大并发数)为1的 mergeAll 。
 *
 * @example <caption>每次点击都会触发从0到3的定时器(时间间隔为1秒),定时器之间是串行的</caption>
 * var clicks = Rx.Observable.fromEvent(document, 'click');
 * var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));
 * var firstOrder = higherOrder.concatAll();
 * firstOrder.subscribe(x => console.log(x));
 *
 * // 结果如下:
 * // (结果是串行的)
 * // 对于"document"对象上的点击事件,都会以1秒的间隔发出从0到3的值
 * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
 *
 * @see {@link combineAll}
 * @see {@link concat}
 * @see {@link concatMap}
 * @see {@link concatMapTo}
 * @see {@link exhaust}
 * @see {@link mergeAll}
 * @see {@link switch}
 * @see {@link zipAll}
 *
 * @return {Observable} Observable,该 Observable 串联地发出所有内部 Observables 的值。
 * @method concatAll
 * @owner Observable
 */
export function concatAll() {
    return this.lift(new MergeAllOperator(1));
}
//# sourceMappingURL=concatAll.js.map