我使用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);
});
你的用例是什么并不完全清楚。所以我假设你有多个请求依赖于第一个请求的响应。那是
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))
...
}
您需要将firstObservable
保存在变量中,并使用share()
和replay()
使其从多个源执行一次(第一个可观察将被订阅一次),但其值将被发送到多个第二个可观察量。
Observable<Something> firstObservable = firstRequest().share().replay()
Observable<ResponseBody> secoondRequest2 = firstObservable.flatMap(responseBody -> {
return RetrofitFactory.create().setIssuingCountry(countrySetRequest1);
});