Operator

RxJS 中的 Operator 实际上就是函数,在 RxJS 中有两种 Operator,一种是管道操作符(Piped Operator),一种是创建操作符(Creation Operator)。

创建操作符则是用来快速创建 Observable。例如of(1, 2, 3)。常用的创建操作符主要有以下这些。

操作符执行功能
ajax执行 Ajax 访问。
bindCallback将传统的回调 API 转换为 Observable
bindNodeCallback将 NodeJS 的回调 API 风格转换为 Observable
defer当有订阅的时候才创建 Observable
defer创建一个空白的 Observable
from以给定的对象为源创建 Observable
fromEvent将给定的 DOM 事件转换为 Observable
generate按照给定的规则生成 Observable
interval生成一个定时发出计数信号的 Observable
of将现有序列转换成 Observable
range创建一个会发送指定序列的 Observable
throwError创建一个只会抛出指定错误的 Observable
timer创建一个在指定延时之后发出计数信号的 Observable
iif创建一个根据指定条件发送信息的 Observable
combineLatest将两个 Observable 交叉合并在一起。
concat将两个 Observable 交叉合并在一起。
forkJoin将所有 Observable 的最终值合并在一起。
forkJoin将所有 Observable 合并。
race从多个 Observable 中选择第一个被发送的值。
race组合多个 Observable 发送的值合并成键值对。

对于可以合并多个 Observable 的方法,需要参考 RxJS 的文档来根据示意图选择使用。

管道操作符主要用于在.pipe()方法中对 Observable 发出的数据进行变换。例如。

observable.pipe(
  filter(x => x % 2 !== 0),
  map(x => x * 2)
);

以下列举一些常用的管道操作符。

操作符执行功能
buffer(notifier)缓存直到notifier发送一个值作为信号。
bufferTime(time)缓存一段时间内发送的值。
bufferWhen(obsesrvable)缓存数据直到另一个 Observable 发送信号。
concatMap()合并两个 Observable 并同时进行变换。
expand()根据另一个 Observable 进行扩展。
groupBy()Observable 发送的值进行分组。
map()Observable 发送的值进行变换。
mergeMap()合并两个 Observable 的同时进行变换。
partition()按照条件将 Observable 分散成多个 Observable
partition()从发送的值中取得键值相近的值。
partition()对发送的值进行迭代计算,立刻返回结果。
switchMap()合并两个 Observable 并同时进行变换。
window()根据另一个 Observable 的发送进行分组。
debounce()延迟一段时间进行发送。
distinct()对发送的值进行去重。
elementAt()选择指定索引的值。
filter()选择符合条件的值。
first()选择第一个值。
last()选择最后一个值。
sample()根据另一个 Observable 的发送进行采样。
skip()丢弃指定数量的值。
take()只取指定数量的值。
throttle()间隔一段时间进行发送。
combineAll()组合 Observable
concatAll()展平并连接 Observable
mergeAll()按照发送顺序展平合并。
startWith()将指定值添加到起始发送位置。
multicast()返回多个 ConnectableObservable 供群发。
publish()返回一个 ConnectableObservable 供自由连接。
catchError()捕获错误并重新发送其他 Observable
retry()重新请求发送。
retry()附加一个副作用处理过程。
every()确定所有值是否满足条件。
find()选择符合条件的值。
count()发送值的总个数。
max()发送值的最大值。
min()发送值的最小值。
reduce()对发送的值进行迭代计算,最后返回结果。