5月30日 21:21
RxJS 6 升级到 RxJS 7 时要注意哪些变化?
RxJS 7 不是把 RxJS 6 推倒重来,而是在保持 pipe 操作符模型的基础上,重点修了类型、弃用 API、Promise 转换和多播写法。项目从 6 升到 7,通常不用大面积重写业务流,但要重点检查 throwError、toPromise、combineLatest/concat/merge 的静态调用、shareReplay 配置,以及 TypeScript 版本和严格类型报错。
追问
最大的破坏性变化是什么?
toPromise 被废弃,应该改成 firstValueFrom 或 lastValueFrom。前者拿第一个值后退订,后者等流 complete 后取最后一个值。
throwError 为什么改成工厂函数?
RxJS 7 推荐 throwError(() => error),错误对象会在订阅时创建,堆栈更准确。
导入路径需要怎么改?
多数项目仍从 rxjs 和 rxjs/operators 导入。更重要的是清理 rxjs/internal/* 深层导入。
shareReplay 有什么坑?
缓存 HTTP 时常写 shareReplay(1),但要考虑 refCount 和重置策略,否则长期服务可能一直持有缓存。
写段代码
javascriptconst source$ = throwError(() => new Error('request failed')); const value = await firstValueFrom(apiResult$);