catch和onErrorResumeNext之间的区别

Ser*_*lla 7 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));
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ton 9

他们是独特的.

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

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

"我查询串接 2个可观,如果第一观察到的失败,然后继续下一个观察的呢."

Catch 更普遍的是:

"我的查询避免了失败.如果observable失败,那么继续使用另一个observable."

如果你在连接的边界上避免失败,那么使用OnErrorResumeNext; 否则,避免一般使用失败Catch.

  • 该名称很可能来自 Visual Basic“On Error Resume Next”语句,其语义与此运算符类似。 (2认同)