首页 > 解决方案 > 如何使用 RxJava2 和 Retrofit 顺序执行 n 次调用

问题描述

所以以下场景:我有一个带有 fe id 的动态数组列表。我想为这个列表中的每个 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
});

标签: androidretrofit2rx-java2

解决方案


似乎用 concatMapCompletable 替换 flatMapCompletable 正在完成这项工作。

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

推荐阅读