Как выполнить n вызовов последовательно с помощью RxJava2 и Retrofit - PullRequest
0 голосов
/ 08 июня 2018

Итак, следующий сценарий: у меня есть динамический массив с идентификаторами.И я хочу сделать для каждого идентификатора в этом списке запрос к API.Следующие запросы должны начинаться только тогда, когда предыдущий запрос получил успешный ответ.Так что никаких претензий не требуется.Есть ли какой-нибудь симпатичный способ получить это с помощью retrofit и rxjava.

У меня есть одно решение с рекурсивной функцией:

foo(int position, List<Int> idList, ApiController controller){
  if(idList.size() < position){
    //execute finish
  }else{
  controller.postRequest().subscribe(()->{
    //Request finish. Do next request...
    foo(++position, idList, controller);});
}

Есть ли способ сделать это в симпатичном с rxjava2?

Я только что придумал асинхронное решение для rxjava2: (которое мне хорошо, но не полностью заполняет работу ...

Observable.fromIterable(idList).flatMapCompletable(id -> {
controller.doRequests();})
.subscribe(()->{
//Finished all requests. Do stuff
});

1 Ответ

0 голосов
/ 11 июня 2018

Похоже, что замена flatMapCompletable на concatMapCompletable делает всю работу.

Observable.fromIterable(idList).concatMapCompletable(id -> {
controller.doRequests();})
.subscribe(()->{
//Finished all requests. Do stuff
});
...