Concat 等待前面的 Observable 完成,然后再订阅你传递给它的每个额外的 Observable。注意,由于这一点,如果你尝试连接一个“热”Observable(即一个立即开始发射数据,并且在它被订阅之前就開始发射数据的 Observable),Concat 将看不到,因此也不会发射该 Observable 在所有之前的 Observable 完成且 Concat 订阅它之前发射的任何数据。
在一些 ReactiveX 实现中,还有一个 ConcatMap 操作符(也称为 concat_all
、concat_map
、concatMapObserver
、for
、forIn
/for_in
、mapcat
、selectConcat
或 selectConcatObserver
),它将源 Observable 发射的项目转换为相应的 Observable,然后按观察和转换它们的顺序连接这些 Observable 发射的项目。
The StartWith 操作符类似于 Concat,但它是前置而不是附加项目或项目发射,以源 Observable 发射的项目或项目发射。
The Merge 操作符也类似。它组合两个或多个 Observable 的发射,但可能会交织它们,而 Concat 永远不会交织多个 Observable 的发射。
concat
RxCpp 将此操作符实现为 concat
还有一个实例方法 concatWith
,使得 Observable.concat(a,b)
等价于 a.concatWith(b)
。
concatWith(Observable)
还有一个实例方法 concatWith
,使得 Observable.concat(a,b)
等价于 a.concatWith(b)
。
concatWith(Observable)
RxJS 将此操作符实现为 concat
和 concatAll
。
concat
和 concatAll
存在于以下每个发行版中
rx.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js
还有一个实例方法 concatWith
,使得 Observable.concat(a,b)
等价于 a.concatWith(b)
。
RxScala 以两种方式实现了此操作符。有一个 concat
操作符,它接受 Observable 的 Observable 作为参数,然后按它们发射的顺序连接这些 Observable 的每一个。还有一个 ++
操作符,它将一个 Observable 连接到另一个。