Опрос на долгое задание на обновление статуса - PullRequest
0 голосов
/ 20 марта 2019

У меня есть сценарий использования, в котором мне нужно следующее

  1. Вызовите конечную точку POST, которая запускает процесс и дает статус, называемый «обработка».Предположим, что у нас есть POST / account, который начинает создавать ресурс учетной записи.

  2. Вызовите конечную точку GET (GET / accounts / {id}), которая даст статус ресурса учетной записи.Давайте представим, что есть только два состояния -> «обработка» и «выполнено».Мне нужно продолжать опрашивать конечную точку GET до тех пор, пока состояние ресурса не изменится на «выполнено»

  3. После того, как GET / accounts / {id} вернет статус «завершен», мне нужно сделать возвратзавершенный ресурс.

Мой главный вопрос - как сделать это в rxjava с помощью длинного опроса.Я посмотрел на некоторые ссылки здесь

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...