在 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/