catch和onErrorResumeNext之间的区别

时间:2014-10-29 15:12:51

标签: javascript system.reactive rxjs

在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

1 个答案:

答案 0 :(得分:8)

他们是截然不同的。

正如您所指出的,两个运营商都同样处理失败;但是,他们在完成工作方面有所不同。

OnErrorResumeNext只是一个具有以下语义的专业化:

"我的查询连接两个observable。如果第一个observable失败,那么 resume next observable。"

Catch更为通用:

"我的查询避免了失败。如果观察失败,则继续使用另一个可观察者。"

如果您在连接边界上避免失败,请使用OnErrorResumeNext;否则,为了避免一般使用失败Catch