Повторение или многократное выполнение в rxjava - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть конкретная задача получить несколько пакетов данных с сервера, вызвав один и тот же запрос несколько раз.В то время как ответы содержат больше флаг - я должен отозвать этот запрос.

Кажется что-то вроде этого:

fun getData(some params): Single<Response<DataEntity>>
//
repository.getData(params)
    .flatMap {
        if (it.body()?.more == false)
           more = false
        else (
          // here i want to repeat my request 
          // repository.getData(params) to get more data
        )
    }
    .flatMap {// here i want to get all the data from 
              //previous requests to save to db etc.
    }

Может быть, мне нужноиспользуйте что-то вроде repeatWhen или repeatautUntil операторов, но я пока не могу найти решение.Пожалуйста, помогите!)

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать оператор concatMap рекурсивным способом и в качестве условия выхода вернуть только результат:

Single<Response<DataEntity>> getDataAndContinue(params) {
  return getData(params)
      .concatMap(new Func1<Response<DataEntity>, Single<Response<DataEntity>>>() {

        @Override
        public Single<Response<DataEntity>> call(Response<DataEntity> response) {
          if (!response.body().hasMore()) {
            return Single.just(response);
          }
          return Single.just(response)
              .concatWith(getDataAndContinue(params));
        }   
    });
}
...