RxJS 流操作:合并、切换与嵌套展开
1. 流的连接操作(concat)
在 RxJS 中, merge()
操作符会按照从源流接收到事件的顺序输出所有可观察数据。但在某些场景下,我们可能更希望在合并可观察序列时保留其完整顺序,而非交错输出。这就是流的连接操作(concatenation)。
连接操作就像连接两个字符串或数组一样,将两个流连接起来,生成一个全新的可观察对象,该对象由两个组成可观察对象的事件构成,类似于集合的并集操作。其签名与 merge
操作符几乎相同:
const source$ = Rx.Observable.concat(...streams)
concat()
与 merge()
的关键区别在于: merge()
允许立即订阅所有源可观察对象,而 concat()
一次只订阅一个可观察对象。它会依次处理每个流,直到前一个流完成后才会订阅下一个流。
以下是一个简单的示例:
const source1$ = Rx.Observable.range(1, 3).delay(3000);
const source2$ = Rx.Observable.of('a', 'b', 'c');
const result = Rx.Observable.concat(source1