RxJS迁移后combineLatest弃用lint报错问题求助
解决RxJS 6中
combineLatest实例方法弃用的问题 我之前帮同事处理过完全一样的问题,RxJS 6对Observable的组合方法做了不小的调整,你碰到的这个报错核心原因就是:实例版本的combineLatest已经被彻底弃用,必须改用静态版本的combineLatest。
问题根源
RxJS 6重构了API设计,像combineLatest这类用于组合多个Observable的方法,不再作为Observable实例的方法存在(比如this.store.combineLatest(...)这种写法),而是要作为独立的静态函数调用,同时导入路径也有变化。
具体修复步骤
修正导入语句
你现在从rxjs/operators导入combineLatest是错误的,静态方法需要从rxjs核心库导入:// 删除错误的导入 // import {map, combineLatest} from 'rxjs/operators'; // 替换为: import { combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; // 如果还需要map操作符就保留这句重构调用逻辑
把原来的实例调用方式改成静态函数调用,将所有需要组合的Observable作为参数直接传给combineLatest:// 原来的报错写法 // this.store.combineLatest( // this.store.select(lang.getCurrent), // this.store.select(lang.getCurrentLocale) // ).subscribe(...) // 修复后的正确写法 combineLatest( this.store, // 原this.store作为第一个待组合的Observable this.store.select(lang.getCurrent), this.store.select(lang.getCurrentLocale) ).subscribe(([state, currentLang, locale]) => { this._language = session.language === currentLang ? '' : currentLang; this._locale = session.locale === locale ? '' : locale; });
额外说明
如果你的this.store是NgRx这类库的Store实例(本身就是Observable),上面的写法完全符合逻辑。静态版本的combineLatest会等待所有传入的Observable都至少发出一次值,然后把每个Observable的最新值组合成数组返回,和你原来用实例方法的逻辑完全一致。
要是你后续需要在管道流里做类似的组合操作,RxJS 7+还提供了combineLatestWith管道操作符,但你的场景用静态combineLatest就足够解决问题了。
内容的提问来源于stack exchange,提问作者Samer
相关产品推荐
相关产品推荐

