Как избежать исключений, брошенных в одобренном -- error-handling поле с участием rx-java пол Связанный проблема

How to avoid exceptions thrown in onCompleted to be swallowed


2
vote

проблема

русский

Использование Rxjava 1.1.3, при броске исключения в <Код> onCompleted обработка, <код> onError не вызывается, и не распространяется ошибка для вызова нити. Это просто исчезает.

В качестве примера рассмотрим следующий тест SPOCK:

 <код> def "when a onCompleted throws an IllegalStateException, it's handled by the onError handler"() {     given:     boolean onErrorCalledFromSubscribe = false     when:     Observable.just(1, 2, 3)             .subscribe(             Actions.empty(),             { onErrorCalledFromSubscribe = true},             {throw new IllegalStateException("I'm behaving badly")})     then:     noExceptionThrown()     onErrorCalledFromSubscribe == true }   

Вышеупомянутый тест терпит неудачу, потому что OneRrorCalledFromsubscribe никогда не вызывается и не является ложным в конце теста.

Теперь я могу представить, что когда-то <код> onCompleted вызывается, <код> onError не должен вызывать, потому что либо тот, либо другой должен вызывать.

Однако мне интересно, как вы справляетесь с такими ситуациями, когда <код> RuntimeException вызывается в вашем onCompleted метода, и вы хотите обрабатывать ошибку.

Вы просто обертываете <код> onCompleted вызовите в попытке поймать и обрабатывать ошибку там?

Английский оригинал

Using rxJava 1.1.3, when throwing an exception in the onCompleted handling, the onErroris not called nor is the error propagated to the calling thread. It simply disappears.

As an example consider the following spock test:

def "when a onCompleted throws an IllegalStateException, it's handled by the onError handler"() {     given:     boolean onErrorCalledFromSubscribe = false     when:     Observable.just(1, 2, 3)             .subscribe(             Actions.empty(),             { onErrorCalledFromSubscribe = true},             {throw new IllegalStateException("I'm behaving badly")})     then:     noExceptionThrown()     onErrorCalledFromSubscribe == true } 

The above test fails because onErrorCalledFromSubscribe is never called and is false at the end of the test.

Now, I can imagine that once onCompleted is called, onError shouldn't be called because either the one or the other should be called.

However, I wonder how do you handle such situations where a RuntimeException is called in your onCompleted method and you want to handle the error.

Do you simply wrap the onCompleted call in a try-catch and handle the error there?

</div
     
   
   

Список ответов

0
 
vote
vote
Лучший ответ
 

Просто используйте попробовать в <Код> onCompleted Если вы думаете, что там может быть исключение, брошенный там.

Как я уже упоминал в комментариях, rxjava не должен быть глотанием исключения из <код> onCompleted , но в настоящее время есть; Тем не менее, если вы знаете, что есть собирается , чтобы быть возможность исключения, вы должны просто справиться с этим самостоятельно.

 

Just use a try-catch in onCompleted if you think there might be an exception thrown in there.

As I mentioned in the comments, RxJava should not be swallowing exceptions from onCompleted but currently is; still, if you know that there is going to be the possibility of an exception, you should just handle it yourself.

</div
 
 

Связанный проблема

4  Сообщение об ошибке против броска исключения C # ASP.NET  ( Error message vs throwing exception c sharp asp net ) 
Во многих случаях в веб-приложениях вам нужно будет вернуть сообщение об ошибке, а не простой истинный / ложный результат. Для этого можно использовать исключ...

11  Какой подход для обработки и возвращения ошибок (не исключительных и исключительных) в области проектирования дизайна доменов и совокупных корней?  ( What approach is there for handling and returning errors non exceptional and ex ) 
Я пытаюсь найти хорошую статью / примеры того, как DDD-сущности лечат ошибки (и что было бы считать исключительными ошибками и то, что бы не было) и как они п...

0  Доступ всех переменных в функции, даже если ошибка брошен?  ( Access all variables within a function even when error is thrown ) 
ниже у меня есть <код> main функция. Эта функция имеет много других переменных, объявленных в нем, и работает множество функций. Если в функции возникает оши...

1  Как перенаправить ошибку на маршрут в верблюде Apache  ( How to redirect error to route in apache camel ) 
Мой образец контекста верблюда. <код> <camel:camelContext> <camel:route id="r1"> <camel:from="someEndpoint"/> ... <camel:to="to2"/> ...

1  Расположение журнала ошибок Python  ( Python error log location ) 
Я разрабатываю приложение Python на flask Framework. И я использую .wsgi , чтобы развернуть его. Я запутался по локациям журнала ошибок. Похоже, что ошибки...

0  Содержание захвата от сообщений вкладки SSMS  ( Capture content from messages tab ssms ) 
Я использую следующие запросы, чтобы сократить логину базы данных. <код> DBCC shrinkfile('Sample_log',0) Моя проблема заключается в том, что даже если ...

1  Как отладить ошибку Messsage в Odoo  ( How to debug error messsage in odoo ) 
Я создал свой собственный пользовательский отчет, в котором, когда я печатаю свой отчет в то время, когда будет создано сообщение об ошибке ниже <код> 500: ...

2  Body-Parser Catch Bad Json  ( Body parser catch bad json ) 
Можно ли ловить синтаксис плохого json в <код> 14334286061 ? Следующий код показывает мою попытку. Проблема в том, что я не могу получить доступ к ним <код>...

1  Отображение сообщения об ошибке об ошибке пользователю в SWIFT  ( Displaying networking error message to user in swift ) 
Вопрос в том, как я могу сделать этот код многоразовой, особенно проверкой ошибки в сетевом методе и условию в выполнении завершения, поэтому у меня нет дубли...

0  Составление ошибок в ржавчине: Совместные результаты на ОК  ( Composing errors in rust concating results on ok ) 
У меня есть следующий код. Работает. Но мне больше интересует написание <код> make_tea где я называю две функции: <код> get_milk_from_cow и <код> pour_mil...

0  C Scanf: Что означает возвращаемое значение -1?  ( C scanf what does a return value of 1 mean ) 
Я пишу программу, которая сканирует вход от stdin (ну это должно в любом случае). В определенной точке в программе мне нужно сканировать int с помощью Scanf. ...

0  Как выставить больше информации о сбое хранящихся в агенте SQL  ( How to expose more information about the failure of a stored proc in sql agent ) 
У меня есть настройка задания агента SQL и в этой задании есть шаг для выполнения сохраненного ProC. Если это сохраненное proc не удается, то задание агента S...

0  Обработчик ошибок Larave ищет представлений в FileViewFinder.php  ( Laravel error handler looking for views in fileviewfinder php ) 
Попытка реализовать пользовательский обработчик ошибок для Larave, чтобы его нажатые живые живые и т. Д., Никакие, чем обычные красные и черные экраны. Я на...

0  Объект не существует - Mongodb  ( Object does not exist mongodb ) 
Ошибка: У меня есть ошибка " не может устанавливать свойство 'username' null. " Похоже, ошибка происходит, когда я пытаюсь найти в настоящее время Зарегистр...

3  Wget не могу загрузить файл, но браузер может  ( Wget cant download file but browser can ) 
У меня есть URL, как <код> http://23.246.50.145/?o=AQFsBQ9SB1l-S4Ch0gw3lM0zSs4ReWo3_PsOqoF35YR0eHrAqxQ7GIRonzVp_nrrJ4m9cKer-YAmV-rgYJXHJ1NE9JjLqf78Jp7l9Y-z2...

Связанный проблема

4  Сообщение об ошибке против броска исключения C # ASP.NET 
11  Какой подход для обработки и возвращения ошибок (не исключительных и исключительных) в области проектирования дизайна доменов и совокупных корней? 
0  Доступ всех переменных в функции, даже если ошибка брошен? 
1  Как перенаправить ошибку на маршрут в верблюде Apache 
1  Расположение журнала ошибок Python 
0  Содержание захвата от сообщений вкладки SSMS 
1  Как отладить ошибку Messsage в Odoo 
2  Body-Parser Catch Bad Json 
1  Отображение сообщения об ошибке об ошибке пользователю в SWIFT 
0  Составление ошибок в ржавчине: Совместные результаты на ОК 
0  C Scanf: Что означает возвращаемое значение -1? 
0  Как выставить больше информации о сбое хранящихся в агенте SQL 
0  Обработчик ошибок Larave ищет представлений в FileViewFinder.php 
0  Объект не существует - Mongodb 
3  Wget не могу загрузить файл, но браузер может