用途:帮助编写符合 RxJS 惯用法、可组合且高效的反应式代码,适用于编写、重构、审查或调试使用 RxJS 的场景。核心思想是尽量把逻辑放在 observable 链里,而不是放进 .subscribe() 回调中。
主要能力:覆盖多个主题,包括用链内派生加载/错误状态、用 scan 保留上一次结果、把臃肿的 new Observable() 构造函数拆成小而专注的片段、构建带定时与延迟的内部 observable 序列、以及用 OperatorFunction 编写内联或抽取出的自定义操作符。它还给出常见反模式的对照重构,例如订阅中嵌套订阅改为 switchMap、可变变量改为 scan 或 combineLatest、setTimeout 改为 delay/timer/debounceTime、try/catch 改为 catchError、手动取消标志改为 switchMap。
关键要点:扁平化操作符选择——switchMap 用于只关心最新值(用户输入、搜索、路由变化),mergeMap 并发运行全部内部流,concatMap 按顺序排队,exhaustMap 在内部流运行期间忽略新值(防重复提交),多数 UI 与请求场景默认用 switchMap。错误处理上,想让外层流继续运行就把 catchError 放在内部 observable 上,retry 同理应重试内部操作。内存方面,减少手动订阅,用 first()、take(n)、takeUntil(destroy$) 等能自然完成的操作符,takeUntil 必须是管道中最后一个操作符;冷 observable 用 shareReplay({ bufferSize: 1, refCount: true }) 共享。热/冷 observable 区别、combineLatest 与 withLatestFrom 的差异、startWith 用于解除 combineLatest 等待、Subject 仅适合事件总线与桥接回调而非通用状态容器,也是重点内容。副作用应放在 tap 而不是 subscribe,subscribe 最好不传参数。
使用方式:资料按主题提供参考文件,包括 references/loading-state-patterns.md、references/massive-observable.md、references/inner-observable-chains.md、references/custom-operators.md,按需阅读对应文件获取详细示例与模式。
适用场景:涉及异步数据获取与加载指示器、多步异步序列与动画时序、可复用流逻辑抽取、RxJS 调试与重构等。
限制:资料未提供安装方式、依赖版本、运行平台或收费信息;该技能面向使用 RxJS 的代码场景,具体项目接入方式暂未提供。