javascript - catch 和 onErrorResumeNext 的区别

标签 javascript system.reactive rxjs

在 RxJS 中,Observable 实例的 catch 方法和 onErrorResumeNext 方法之间似乎没有什么区别,除了 onErrorResumeNext 连接原始 Observable 与 Observable 参数是否发生错误。

这样的话,命名是不是有点乱?因为如果出现错误,onErrorResumeNext 的工作方式与 catch 的工作方式完全相同:

var testObservable = Rx.Observable.return(1).concat(Rx.Observable.throw("Error"))

// Both onError and onCatch will emit the same result: 1, 2
var onError = testObservable.onErrorResumeNext(Rx.Observable.return(2));
var onCatch = testObservable.catch(Rx.Observable.return(2));

是否有充分的理由不总是使用 catch

最佳答案

它们是不同的。

正如您所注意到的,两个运算符处理失败的方式相似;但是,它们在完成处理方面有所不同。

OnErrorResumeNext 只是具有以下语义的特化:

“我的查询连接两个可观察对象。如果第一个可观察对象失败,则继续 下一个可观察对象。”

Catch 更为通用:

“我的查询避免失败。如果 observable 失败,则继续另一个 observable。”

如果要避免连接边界上的失败,请使用 OnErrorResumeNext;否则,为避免一般情况下的失败,请使用 Catch

关于javascript - catch 和 onErrorResumeNext 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634004/

相关文章:

angular - Angular 2 服务中的 Observables 与变量

javascript - Angular 2 Observable 服务集成测试

f# - 从分组的 Observable 中提取值

c# - 响应式扩展从 IObservable 转换为 IEnumerable

angular - 我们是否需要取消订阅已完成/出错的可观察对象?

javascript - Roundcube java脚本 `beforelogin`事件 Hook

angular - 在 Angular 8 中订阅 Observable 组件时遇到问题

javascript - meteor .js : Doing message dependency like most of chat nowadays

javascript变量引用/别名

javascript - 调用 h :commandButton submit 后关闭模态面板