Предположим, я хочу показать некоторые пользовательские данные, которые находятся на сервере. Я бы поискал сервер, кешировал его, а затем представлял его пользователю. Так что мой intial код RxJava будет выглядеть примерно так:Как вы связываете несколько наблюдаемых?
ApiClient.getUser(userId), //An Observable that will spit out a UserResponse
.subscribeOn(Schedulers.io()) //for the API observable (Do i need this?)
.flatMap(new Func1<UserResponse, Observable<DatabasePutResult>>() {
@Override
public Observable<DatabasePutResult> call(UserResponse response) {
return Database.cacheUser(response);
}
})
.subscribeOn(Schedulers.io()) //for the database observable
.observeOn(AndroidSchedulers.mainThread())
.subscribe(//handle DatabasePutResult object in onNext());
Теперь у меня есть два вопроса.
- Это правильный способ соединения двух наблюдаемых? Если нет, как я должен это делать?
- Если бы я хотел обработать
onError
для Наблюдаемого Апи, мог бы я как-то его поддерживать, сохраняя цепочку? Если нет, то каков наилучший способ сделать это? Действительно ли мне нужно разделить цепочку на два набора вызовов RxJava?
поэтому, если я понимаю это право, я должен использовать 'onErrorResumeNext()', если я хочу попробовать аналогичный, но другой наблюдаемый (другой наблюдаемый, который испускает один и тот же вывод), но если я хочу обработать эту ошибку наблюдаемого, я могу сделайте это в 'onError()' внутри подписки, проверив 'if (e instanceof SomeException)' – Sree
Полностью правильно. –
А если у вас есть две наблюдаемые, которые испускают одно и то же Исключение. Например, что, если бы у меня был сетевой вызов и на основе этого результата, я делаю другой сетевой вызов. Оба могут испускать HttpException. Вы не можете использовать 'if (e instanceof SomeException)'. Что бы вы предложили в этом сенарио? – Sree