RxJava: какая разница между обратными вызовами в doOnError ( "обратный вызов" ) и подпиской (*, "обратный вызов" )

В моем последнем проекте я использую rxJava, и я понимаю, что observable.doOnError('onErrorCallback').subscribe(action) и observable.subscribe(action, 'onErrorCallback') ведут себя по-разному. Даже из документов это не очевидно для меня, какая именно разница между ними и когда я должен использовать первый и второй варианты.

Ответы

Ответ 1

Оператор doOnError позволяет вам вводить побочный эффект в распространение ошибки последовательности, но не останавливает само распространение ошибки. Абонент является конечным пунктом назначения событий, и они "выходят" из последовательности.

Вы можете увидеть полезность doOnError в следующем примере:

api.getData()
.doOnError(e -> log.error(e))
.retry(2)
.subscribe(...)

Он позволяет заглянуть в ошибку, но позволяет повторить попытку в случае ошибки. С конечным абонентом:

api.getData()
.subscribe(v -> {}, e -> log.error(e) );

Вам необходимо организовать обработку ошибки (помимо ведения журнала) по-своему.

Ответ 2

В соответствии с документацией doOnError не работает по умолчанию для конкретного планировщика