NodeJS中RxJS替代Rx后catch等错误捕获方法失效问题
解决RxJS中
.catch和.onErrorResumeNext失效的问题 这个问题我太熟悉了!你遇到的是RxJS从v6版本开始的核心变化——操作符不再挂载在Observable实例的原型链上,取而代之的是使用pipe()方法来组合pipeable操作符,而且部分操作符的名称也做了调整。
具体原因
老版本的Rx(比如你之前用的rx包)允许直接通过Observable实例链式调用.catch()、.onErrorResumeNext()这类操作符,但RxJS v6+为了优化树摇(Tree Shaking)和避免命名冲突,把所有操作符都改成了需要单独导入的函数,必须通过pipe()方法传入才能生效。另外,原来的.catch改名为catchError,避免和JavaScript的catch关键字冲突。
正确写法示例
首先你需要导入对应的创建函数和操作符:
import { of } from 'rxjs'; import { catchError, onErrorResumeNext } from 'rxjs/operators';
然后用pipe()包裹操作符来实现你的需求:
- 替代原来的
.catch:
// 原来的代码(失效):Rx.of(4).catch(err => Rx.of(7)); // 正确写法: of(4).pipe( catchError(err => of(7)) );
- 替代原来的
.onErrorResumeNext:
// 原来的代码(失效):Rx.of(4).onErrorResumeNext(Rx.of(7)); // 正确写法: of(4).pipe( onErrorResumeNext(of(7)) );
额外提示
如果你是从老版本迁移过来,RxJS还提供了rxjs-compat包,可以临时兼容老的写法,但不建议长期使用,最好还是改成新的pipeable操作符写法,这样能享受到更好的性能和打包优化。
内容的提问来源于stack exchange,提问作者Héctor Valls
相关产品推荐
相关产品推荐

