🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# concat 创建一个输出Observable,它从当前Observable之后的每个给定输入Observable中顺序发出所有值。 **方法签名**: ``` // 静态方法 public static concat(input1: ObservableInput, input2: ObservableInput, scheduler: Scheduler): Observable // 实例方法 public concat(other: ObservableInput, scheduler: Scheduler): Observable ``` **示例**: ```javascript var timer1 = Rx.Observable.interval(1000).take(2); var timer2 = Rx.Observable.interval(2000).take(3); var timer3 = Rx.Observable.interval(500).take(2); var result = timer1.concat(timer2, timer3); result.subscribe(x => console.log(x)); ``` **结果**: ``` 0 1 0 1 2 0 1 ``` **分析**: `concat`操作符功能很简单,很容易理解,只有上一个Observable完成后才会执行后续Observable。 ## concatAll 通过按顺序连接内部的可观察值,将高阶Observable转换为一阶Observable。 >[warning] 如果外部Observable比内部Observable数据流以更快的速度发出时,这里可能会涉及到[背压(backpressure)](https://www.kancloud.cn/wujie520303/angular2_note/347371)问题。 >[info] 注意:`concatAll`等效于`mergeAll`,并发参数设置为1。 **方法签名**: ```javascript public concatAll(): Observable ``` **示例一** ```javascript const source = Rx.Observable.interval(2000); const example = source .map(val => Rx.Observable.of(val + 10)) .concatAll(); example.subscribe(console.log); ``` **结果**: ``` 10 11 12 13 14 15 16 17 18 19 20 ... ``` **分析**: 调用`concatAll`后,它会在上一个Observable对象完成订阅后订阅下一个Observable对象。这 里第一次执行得到结果`10`,然后2秒后source发出第二个值`1`,调用`map`后得到`11`,然后重复整个过程,直到外部Observable结束。 **示例二** ```javascript const a = Rx.Observable.interval(1000).take(5); const b = Rx.Observable.interval(1000).take(2); const c = Rx.Observable.interval(1000).take(3); const source = Rx.Observable.of(a, b, c); const example = source.concatAll(); example.subscribe(console.log); ``` **结果**: ``` 0 1 2 3 4 0 1 0 1 2 ``` ## ConcatMap **方法签名** ```javascript public concatMap(project: function(value: T, ?index: number): ObservableInput, resultSelector: function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any): Observable ```