фонRxJava Ошибка Почтовый оператор Работа с итератора
У меня есть процесс, который использует RxJava, чтобы получить данные из разных мест на основе списка. Каждый предмет получает другой метод (все возвращаемые Observables). Из-за того, что N элементов для получения логического оператора для использования - zip
с итератором.
Проблема
Приведенный ниже код работает, как ожидалось, но это, кажется, «неправильно», что мне нужно try-catch
блок, чтобы поймать исключение, брошенный getBigFoo()
- которая возвращает FooNotFoundException
. Не покрывают ли другие операторы, связанные с ошибкой, такие как onErrorResumeNext()
и onErrorReturn()
?
private Observable<Bar> processFoos(List<Foo> foos) {
List<Observable<? extends IBar>> observablesToZip = new ArrayList<>();
for(Foo foo : foos) {
switch (foo.getType()) {
case BIG_FOO :
try {
observablesToZip.add(getBigFoo(foo.getId()));
} catch (Exception exception) {
//do nothing - but this seems wrong
}
}
}
return Observable.zip(observablesToZip, results -> mergeFoosIntoBar(results));
}
Попытки
Попытка ниже, кажется, не поймать исключение генерируется. Я не понимаю, почему, поскольку в последовательности нет технических элементов вверх или вниз, так что Observable.empty()
должен работать?
private Observable<Bar> processFoos(List<Foo> foos) {
List<Observable<? extends IBar>> observablesToZip = new ArrayList<>();
for(Foo foo : foos) {
switch (foo.getType()) {
case BIG_FOO :
observablesToZip.add(getBigFoo(foo.getId().onErrorResumeNext(Observable.empty()));
}
}
return Observable.zip(observablesToZip, results -> mergeFoosIntoBar(results));
}
Благодарим за ответ, не проталкивает проблему в другом месте. Мне может потребоваться отсрочка, однако, если getBigFoo либо возвращает Observable.just (foo), либо Observable.error (new FooNotFoundException()), то разве операторы ошибок не поймут это? –
, если getBigFoo не вызывает никаких исключений, но вместо этого возвращает Observable (Observable.just() или Observable.error()), то отложить это бесполезно. Я использую defer здесь только для того, чтобы имитировать то, что getBigFoo, на мой взгляд, должен делать (то есть: не бросать никаких исключений). – dwursteisen
OK - поэтому makeend getBigFoo возвращает Observable.error() как я могу его поймать без блока try-catch? –