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 的基础,但并不需要一次性掌握所有,实际开发中可根据需求逐步学习和应用。