Мой вариант использования: у меня есть приложение для Android, мне нужно вызвать один api, когда эти данные станут доступными, вызовите второй api. Для этого я планировал использовать RxAndroid с повторениями.Chain 2 calls with retry using RxAndroid
Я смог выполнить 1 api-вызов с повторениями, но мне нужно связать 2 и иметь возможность отображать 2 разных ошибки, один для вызова 1 недоступен, а один для call2 недоступен.
Я могу повторить попытку на всей цепочке, но я бы предпочел повторить каждую операцию отдельно.
Мой код следующий, мне нужно добавить «callApi1()» перед вызовомApi2, и я бы предпочел, как я сказал, что у меня разные наблюдаемые попытки.
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
try {
subscriber.onNext(callApi2());
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}
})
.retryWhen(new RetryWithDelay(20, 3000))
.timeout(TIME_OUT_SECONDS, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<String>() {
@Override
public void onNext(String data) {
//show something
}
....
}
Мне нужен второй звонок, который должен быть выполнен только в том случае, если первый преуспел. это происходит с concat? – gdogaru
Это зависит от того, что происходит, когда ваш вызов api завершается неудачно. Если он выдает исключение при ошибке, вы должны получить требуемое поведение. – JohnWowUs