在RxJS中,Observable实例的catch
方法和onErrorResumeNext
方法之间似乎差别很小,除了onErrorResumeNext
将原始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
?
答案 0 :(得分:8)
他们是截然不同的。
正如您所指出的,两个运营商都同样处理失败;但是,他们在完成工作方面有所不同。
OnErrorResumeNext
只是一个具有以下语义的专业化:
"我的查询连接两个observable。如果第一个observable失败,那么 resume next observable。"
Catch
更为通用:
"我的查询避免了失败。如果观察失败,则继续使用另一个可观察者。"
如果您在连接边界上避免失败,请使用OnErrorResumeNext
;否则,为了避免一般使用失败Catch
。