@trukhachev

Как выполнить запросы к 2 разным серверам и получить общий результат?

разбираюсь с rxjava на практике и столкнулся с задачей, которую не могу решить. Суть в том, что нужно выполнить 2 запроса к разным сервисам асинхронно (android приложение). Важно что с 2 сервиса ответ может придти 400, но при этом мне важно не потерять ответ от 1 сервиса.

Я попробовал так, в этом решении плохо то что если один сервер не ответит я потеряю ответ от другого. Как это правильно решить?

Observable
                        .zip(serv1Observable,
                                serv2Observable,
                                new BiFunction<Responce1, Responce2, Responce3>() {
                                    @Override
                                    public Responce3 apply(@NonNull Responce1 r1, @NonNull Responce2 r2) throws Exception {
                                        return new Responce3(r1, r2);
                                    }
                                })
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<Responce3>() {
                            @Override
                            public void accept(@NonNull Responce3 r3) throws Exception {

                            }
                        }, new Consumer<Throwable>() {
                            @Override
                            public void accept(@NonNull Throwable throwable) throws Exception {

                            }
                        });
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@AlexeyVD
Error Handling Operators
Если правильно вас понял, то вы хотите, в случае возникновения ошибки в запросе ко второму сервису, все равно прокинуть дальше результат. Как вариант к цепочке Observable второго сервиса добавить оператор onErrorReturn(), в нем обработать ошибку и прокинуть дальше пустой результат или что-то типа того.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы