Rxjs 操作符

RxJS 的操作符种类繁多,分类清晰,学习起来可以从 功能类别 入手。以下是对所有操作符的详细分类和简单说明:


1. 创建类操作符

用于创建 Observable。

操作符 描述
of 从一组值创建一个同步发射的 Observable。
from 将数组、Promise、迭代器或 Observable-like 对象转换为 Observable。
fromEvent 从事件创建 Observable,比如 DOM 事件。
interval 按固定时间间隔发出数字序列(无限 Observable)。
timer 在一段时间后触发(一次或间隔性)发出值。
range 发出一段连续的数字序列(如从 1 到 5)。
empty 创建一个立即完成的 Observable。
never 创建永不发出任何值的 Observable。
throwError 创建立即抛出错误的 Observable。
defer 延迟创建 Observable,直到有订阅时才实际执行。
generate 使用初始值、条件和更新逻辑生成 Observable。

2. 转换类操作符

用于转换数据。

操作符 描述
map 对发出的每个值应用函数并返回新值。
mapTo 将所有值映射为指定的常量值。
switchMap 映射为新的 Observable,取消之前的订阅,仅订阅最新的 Observable。
mergeMap 映射为新的 Observable,并发处理所有内部 Observable。
concatMap 映射为新的 Observable,顺序订阅内部 Observable。
exhaustMap 映射为新的 Observable,忽略新值直到当前内部 Observable 完成。
scan 类似于 reduce,但会持续发出中间累积值。
buffer 收集发出的值,直到另一个 Observable 发出值时,将其作为数组发出。
bufferCount 每当收集到指定数量的值时,将其作为数组发出。
bufferTime 收集值并在固定时间间隔后发出数组。
bufferToggle 开关式收集缓冲区,使用一个开/关控制 Observable。
toArray 将所有值收集到数组后发出。

3. 过滤类操作符

用于筛选和限制数据流。

操作符 描述
filter 根据条件过滤值,只发出满足条件的值。
take 仅发出前 N 个值。
takeLast 仅发出 Observable 完成前的最后 N 个值。
takeUntil 发出值直到另一个 Observable 发出值。
skip 跳过前 N 个值。
skipLast 跳过 Observable 完成前的最后 N 个值。
distinct 过滤掉重复值(基于默认或指定的比较器)。
distinctUntilChanged 仅发出相邻的不同值。
debounceTime 忽略快速发出的值,仅在指定时间内未发出新值时才发出值。
throttleTime 限制发出值的频率,每隔指定时间发出一次。
auditTime 忽略一段时间内的值,仅发出最后一个值。

4. 合并类操作符

用于组合多个 Observable。

操作符 描述
merge 并行合并多个 Observable,按发出值的时间顺序合并发出值。
concat 串行连接多个 Observable,等待前一个完成再订阅下一个。
combineLatest 当任何一个 Observable 发出新值时,将所有 Observable 的最新值作为数组发出。
zip 将多个 Observable 的值按索引一一配对并发出(数组形式)。
forkJoin 等待所有 Observable 完成并发出每个 Observable 的最终值(数组形式)。
startWith 在源 Observable 之前插入一个值。
withLatestFrom 在源 Observable 发出值时,结合另一个 Observable 的最新值。

5. 错误处理类操作符

用于处理错误。

操作符 描述
catchError 捕获错误并返回新的 Observable。
retry 在错误时重新订阅源 Observable(指定次数)。
retryWhen 在错误时重新订阅,但可以通过自定义逻辑控制何时重试。
onErrorResumeNext 在错误时继续下一个 Observable。

6. 多播类操作符

用于共享和复用 Observable。

操作符 描述
share 使 Observable 变为共享(热 Observable),多个订阅共享同一数据流。
publish 将 Observable 转为 ConnectableObservable,需手动调用 connect()
shareReplay 类似于 share,但会缓存最近发出的值以供新订阅者接收。
refCount 自动管理 ConnectableObservable 的连接和断开。

7. 工具类操作符

辅助调试和控制流。

操作符 描述
tap 允许在流中插入副作用操作(如日志、调试)。
delay 延迟发出值。
timeout 如果在指定时间内未发出值,则抛出错误。
finalize 在 Observable 完成或出错时执行清理操作。
repeat 重复订阅 Observable(指定次数或无限次)。

这些操作符是 RxJS 的基础,但并不需要一次性掌握所有,实际开发中可根据需求逐步学习和应用。