如何使用RxJava2和Retrofit顺序执行n次调用

时间:2018-06-08 14:58:18

标签: android retrofit2 rx-java2

以下情景: 我有一个动态的arraylist与f.e. IDS。我想为这个列表中的每个id做一个api的请求。只有当前一个请求获得成功答案时,才能启动以下请求。所以没有任何要求。 有什么好方法可以通过改装和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 :(得分:0)

似乎用flatatMapCompletable替换flatMapCompletable正在做的工作。

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