Вы можете использовать retryWhen()
, как показано ниже.
Учитывая, что у нас есть
private Single<Account> createAccount() // API call to create account
private Single<Account> getAccount(int id) // API call to get account info
При получении информации об учетной записи, если статус «обработка», мы выдаем ошибку, которая будетв свою очередь вызвать retryWhen ().И приведенный ниже код будет повторяться каждые 5 секунд, пока статус не изменится на «завершен».Только поток getAccount () будет повторен снова.
createAccount()
.flatMap(
createdAcc -> getAccount(accountId)
.flatMap(
status -> status == "procesing" ?
Single.error(new Throwable()) :
Single.just(status)
)
.doOnError(throwable -> Log.e("", "retrying"))
.retryWhen(errors -> errors.flatMapSingle(error -> Single.timer(5, TimeUnit.SECONDS)))
)
.subscribe();