2017-02-10 10 views
7

В цепи obs1.flatmap(x -> obs2()).subscribe(sub), если obs2 вызывает ошибку, вызывает немедленный вызов onError по телефону sub. Это как описано:RxJava FlatMap: как пропустить ошибки?

Обратите внимание, что если какие-либо из отдельных наблюдаемых отображенных на предметы от источника наблюдаем flatMap прерывается, вызывая OnError, то Наблюдаемых производства flatMap сам будет немедленно прервать и Invoke OnError.

Но можно ли проигнорировать ошибки obs2 и сделать obs1 продолжать излучать?

ответ

0

Не могли бы вы просто сделать большой блог try-catch внутри obs2() и оставить блог catch пустым? Никаких ошибок не будет выброшено, и поэтому onError из sub не будет вызван, не так ли?

6

Rx предоставляет некоторым операторам возможность совершать ошибки. Просто создайте третий Observable из obs2, который не распространяет ошибку.

Observable<YourType> obs3 = obs2.onErrorResumeNext(Observable.<YourType>empty()); 
obs1.flatmap(x -> obs3) 
2

.onErrorResumeNext - вы можете использовать это, чтобы попытаться справиться с этим по-разному, таким образом, вы будете передавать ранее излучаемое значение, которые при обращении возникает ошибку в другой наблюдаемый, где вы можете попробовать другой подход. Или обрабатывать ошибку.

.onErrorReturn - Если это нормально для вас, просто верните некоторое значение по умолчанию и проигнорируйте ошибку.

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

  • Нет связанных вопросов^_^