一次订阅一个Observable,并在RxJava中多次使用其值

时间:2019-02-28 16:44:59

标签: android retrofit rx-java rx-java2 kotlinx.coroutines

我正在使用flatMap作为指标,然后我应该触发另一个网络请求。

  Observable<ResponseBody> secoondRequest =  firstRequest.flatMap(responseBody -> {
            return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
        });

问题是我有多个secondRequest Observable,所以我的firstRequest执行了多次。我只需要对其他所有Observables 触发一次

  //This should not call firstRequest again, if it was already triggered once
Observable<ResponseBody> secoondRequest2 =  firstRequest.flatMap(responseBody -> {
            return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
        });

2 个答案:

答案 0 :(得分:0)

尚不清楚您的用例是什么。因此,我假设您有多个请求,具体取决于第一个请求的响应。那是

request1 <-request2,request3,request4 .... 解决问题的一种可能方法如下

Observable<ResponseBody> firstRequest = firstRequest();

Observable<ResponseBody> finalRequest = firstRequest.flatMap(responseBody -> {
 return RetrofitFactory.create().setIssuingCountry(countrySetRequest1)
.merge(RetrofitFactory.create().setIssuingCountry(countrySetRequest1))
.merge(RetrofitFactory.create().setIssuingCountry(countrySetRequest1))
.merge(RetrofitFactory.create().setIssuingCountry(countrySetRequest1))
...
}

答案 1 :(得分:0)

您需要将firstObservable保存在变量中,并使用share()replay()使其从多个源执行一次(第一个可观察的对象将被订阅一次),但其值是发射到多个第二可观察物。

Observable<Something> firstObservable = firstRequest().share().replay()
Observable<ResponseBody> secoondRequest2 =  firstObservable.flatMap(responseBody -> {
        return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
    });