Android Rxjava,如何阻塞直到完成?

Android Rxjava,如何阻塞直到完成?,android,asynchronous,retrofit2,rx-java2,Android,Asynchronous,Retrofit2,Rx Java2,所以我有3个rest服务要调用,问题是,我需要服务1在调用服务2之前完成,我需要服务2在调用服务3之前完成 因为每次我都需要将数据从上一个服务传递到下一个服务 现在我正在链接我的任务,但我不喜欢它,因为方法命名变得非常庞大 服务1的示例 compositeDisposable.add(simpleRetrofitService.getInventaireDisponibleResultatDtos() .subscribeOn(Schedulers.io())

所以我有3个rest服务要调用,问题是,我需要服务1在调用服务2之前完成,我需要服务2在调用服务3之前完成

因为每次我都需要将数据从上一个服务传递到下一个服务

现在我正在链接我的任务,但我不喜欢它,因为方法命名变得非常庞大

服务1的示例

compositeDisposable.add(simpleRetrofitService.getInventaireDisponibleResultatDtos()
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io())
                .subscribe(this::callService2Then3ThenSaveThenGoToNextScreen,
                           this::logErrorAndDisplayPopup));
调用服务一个接一个,然后保存下一个屏幕

然后定义另一个调用callService3ThenSaveThenFoToNextScreen的asynctask

有什么想法吗

谢谢

编辑:精度 Call1将返回一个包含整数列表的对象,如[1,2,8,132] 然后我必须为每个整数调用call2。
call3也是一样,call2给了我一些值,我必须为每个值调用call3。

为了简单起见,我假设您的调用是simpleRetrofitService.call1。simpleRetrofitService.call2和simpleRetrofitService.call3。我还假设他们回来了

然后,您可以使用以下工具执行一些基本操作:

您根本不需要异步任务

更新为对问题更新的回应:

假设您的呼叫返回列表,您可以使用以下方法执行类似操作:


在任务完成之前,这不会特别阻塞—相反,它会将每个请求链接到下一个请求,从而达到预期的结果。我写了一个类似的答案来回答这个so+1:问题是如果call1返回[7,8,12,15],我将不得不调用simpleRetrofitService.call2xxx 4次,参数为7,8,12和15,然后您必须提供问题的详细信息。显然,你是在处理可观察的事物。需要更具体的信息。
simpleRetrofitService.call1()
  .flatMap(r1 -> simpleRetrofitService.call2(r1))
  .flatMap(r2 -> simpleRetrofitService.call3(r2))
  .subscribeOn(...)
  .observeOn(...)
  .subscribe(...)
simpleRetorfitService.call1()
  .flattenAsObservable(...)
  .flatMap(listItem -> simpleRetrofitService.call2(listItem)
  ...