RxJava2 Single не обрабатывает ошибки, даже если предоставляется doOnerror - PullRequest
0 голосов
/ 30 сентября 2018

Я столкнулся с проблемой при использовании RxJava2 (версия 2.2.2).Посмотрите код ниже:

client.get("/iic-router/health").rxSend()
    .doOnError(err -> { err.printStackTrace(); async.complete(); })
    .doOnSuccess(v -> async.complete())
    .subscribe();

Как видите, метод rxSend () возвращает экземпляр Single.Когда я запускаю этот код и WebServer не запускается, я получаю ошибку Connectiong Refused (как и ожидалось), но я получаю ошибку:

io.reactivex.exceptions.OnErrorNotImplementedException: The exception     
was not handled due to missing onError handler in the subscribe() method call.

Если я изменю код на более традиционный способ на RxJava, напримерэто:

client.get("/iic-router/health").rxSend().subscribe(
     v -> async.complete(), 
     err -> { err.printStackTrace(); async.complete(); }
);

Все работает хорошо.Кто-нибудь может мне помочь?Или это настоящая ошибка?

1 Ответ

0 голосов
/ 30 сентября 2018

Это не ошибка, и простое subscribe() задокументировано :

Подписывается на Single, но игнорирует его рассылку или уведомление.

ЕслиСингл выдает ошибку, он упаковывается в OnErrorNotImplementedException и направляется в обработчик RxJavaPlugins.onError.

OnErrorNotImplementedException говорит, что вам нужно реализовать обработчик onError,как вы сделали в своем втором примере.

Вместо doOnError вы также можете попробовать onErrorResumeNext или onErrorReturn , который не вызовет onError при подписке.

...