订阅一次Observable并在RxJava中多次使用它的值

问题描述 投票:0回答:2

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

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

问题是我有多个secondRequest Observable,所以我的firstRequest执行多次..我只需要它为所有其他observable触发一次..

  //This should not call firstRequest again, if it was already triggered once
Observable<ResponseBody> secoondRequest2 =  firstRequest.flatMap(responseBody -> {
            return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
        });
android retrofit rx-java rx-java2 kotlinx.coroutines
2个回答
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))
...
}

0
投票

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

Observable<Something> firstObservable = firstRequest().share().replay()
Observable<ResponseBody> secoondRequest2 =  firstObservable.flatMap(responseBody -> {
        return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
    });
© www.soinside.com 2019 - 2024. All rights reserved.