В моем последнем проекте я использую rxJava, и я понимаю, что observable.doOnError('onErrorCallback').subscribe(action)
и observable.subscribe(action, 'onErrorCallback')
ведут себя по-разному. Даже из документов это не очевидно для меня, какая именно разница между ними и когда я должен использовать первый и второй варианты.
RxJava: какая разница между обратными вызовами в doOnError ( "обратный вызов" ) и подпиской (*, "обратный вызов" )
Ответ 1
Оператор doOnError
позволяет вам вводить побочный эффект в распространение ошибки последовательности, но не останавливает само распространение ошибки. Абонент является конечным пунктом назначения событий, и они "выходят" из последовательности.
Вы можете увидеть полезность doOnError
в следующем примере:
api.getData()
.doOnError(e -> log.error(e))
.retry(2)
.subscribe(...)
Он позволяет заглянуть в ошибку, но позволяет повторить попытку в случае ошибки. С конечным абонентом:
api.getData()
.subscribe(v -> {}, e -> log.error(e) );
Вам необходимо организовать обработку ошибки (помимо ведения журнала) по-своему.
Ответ 2
В соответствии с документацией doOnError
не работает по умолчанию для конкретного планировщика