2014-10-29 2 views
4

В RxJS, там, кажется, очень мало разницы между catch методом наблюдаемого экземпляра и onErrorResumeNext методом, кроме того, что onErrorResumeNext сцепляются оригинал Observable с наблюдаемыми параметрами происходит ли ошибка или нет.разница между уловом и 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?

ответ

5

Они отличные.

Как вы уже отметили, оба оператора обрабатывают отказ аналогичным образом; однако они различаются в отношении их завершения.

OnErrorResumeNext просто специализация со следующей семантикой: «Моим запрос сцепляет два наблюдаемых Если первый наблюдаемое не удается, тем резюме с рядом наблюдаемым в любом случае.»

Catch гораздо более общий:

«Мой запрос позволяет избежать сбоя Если наблюдаемый сбой, а затем продолжить с другим наблюдаемым.».

Если вы избежите отказа на границе конкатенации, используйте OnErrorResumeNext; в противном случае, чтобы избежать сбоев в общем использовании Catch.

+1

Название скорее всего происходит из инструкции Visual Basic 'On Error Resume Next', которая имеет семантику, подобную этому оператору. – Brandon

+0

@Brandon Также хороший момент. Я решил не упоминать об этом, хотя, поскольку я решил, что это не было подходящее имя, команда Rx не использовала бы его. И хотя вопрос OP частично связан с семантикой, я решил сосредоточить свой ответ на различиях между операторами, что показывает, что это имя действительно подходит. –

+0

Ваш ответ имеет смысл, спасибо. Я предполагаю, что путаница связана с именованием, потому что, как вы указываете, главная задача 'onErrorResumeNext' заключается в конкатенации, но это совсем не отражается на имени. – GiantSquid

Смежные вопросы