为什么import { EMPTY } from 'rxjs'语句无法正常生效?
问题原因
该报错是由项目使用的RxJS版本过低导致的:EMPTY是RxJS v6及以上版本才支持的顶层导出常量,报错提示中出现的RxJS/Rx路径是RxJS v5版本的典型结构,v5版本没有EMPTY这个导出项,因此会触发找不到导出的错误。
解决方案
根据项目是否能升级RxJS版本,有两种适配方案:
方案1:升级RxJS到v6及以上版本(推荐)
执行依赖升级命令:npm install rxjs@latest rxjs-compat@latest --save
升级完成后原有import { EMPTY } from 'rxjs'的导入语句即可正常使用,无需修改业务逻辑代码。如果升级后存在其他RxJS API兼容问题,rxjs-compat包可以提供版本兼容过渡能力,不用一次性修改全部旧写法。方案2:不升级RxJS,适配v5版本写法
如果当前项目暂时不适合升级RxJS版本,替换代码中的EMPTY为v5版本对应的空流实现即可,两种可选写法如下:- 使用
Observable.empty()
// 修改导入语句 import { Observable } from 'rxjs/Observable'; // 修改switchMap分支逻辑 switchMap(result => result ? this.dbaccessService.delObjetId(idObject) : Observable.empty())- 使用
of()返回空流
// 修改导入语句 import { of } from 'rxjs/observable/of'; // 修改switchMap分支逻辑 switchMap(result => result ? this.dbaccessService.delObjetId(idObject) : of())- 使用
内容的提问来源于stack exchange,提问作者Luiz Bordoni
相关产品推荐
相关产品推荐

