8

catch在 RxJS 中,Observable 实例的方法和方法之间似乎几乎没有区别,除了将原始 Observable 与 Observable 参数连接起来(无论是否发生错误onErrorResumeNext)这一事实。onErrorResumeNext

如果是这样的话,是不是命名有点混乱?因为万一出现错误,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

4

1 回答 1

11

它们是不同的。

正如您所指出的,两个运算符都以类似的方式处理故障。但是,它们在完成处理方面有所不同。

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

“我的查询连接了两个 observable。如果第一个 observable 失败,则继续使用下一个observable。”

Catch更普遍:

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

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

于 2014-10-29T15:35:49.000 回答