/ / Komponowanie observables w RxJava Android - Android

Komponowanie observables w RxJava Android - Android

"Dostosowywałem moją aplikację na Androida do korzystania z RxJavy, ale mam z tym problem. Jak mi powiedziano w poprzednim poście (Zaczekaj na wszystkie prośby w Android Volley), Używam Observables, aby naśladować, w jaki sposób łączę się z moim API REST w JavaScript. W szczególności, używając biblioteki obietnicy, komponuję takie połączenia:

$q.all([
fetchResourceA(),
fetchResourceB()
])
.then(function (responses) {
...
return fetchResourceC();
})
.then(function (response) {
...
});

W tym przykładzie sprawdzam dwa zasobyjednocześnie zbieraj wyniki, a następnie zbieraj trzeci zasób w oparciu o niektóre parametry z wcześniej zebranych zasobów. Najlepsze, co mogłem zrobić, aby naśladować to w RxJavie, jest tak:

Observable o = Observable.zip(
fetchResourceA(),
fetchResourceB(),
new Func2<ResA, ResB, Object>() {
@Override
public Object call(ResA resA, ResB resB) {
...
}
}
);

Ale staram się je komponować tak, jak robiłemJavaScript. Czy muszę po prostu utworzyć drugą obserwowalną i zasubskrybować ją w wywołaniu zip? To właśnie robię teraz i działa, ale chciałbym wiedzieć, czy istnieje bardziej elegancki i bardziej reaktywny sposób, by uporządkować moje żądania.

Odpowiedzi:

1 dla odpowiedzi № 1

The .then metoda z obietnicy może być transponowana flatMap metoda w RxJava

To, co możesz zrobić, to zip następnie flatMap następnie flatMap

Observable.zip(fetchA(), fetchB(), (a, b) -> new Response(a, b))
.flatMap((responses) -> fetchC())
.flatMap((cResponse) -> /* whatever */)
.subscribe();

Proszę to zanotować fetchA(), fetchB(), fetchC() return Observables.

(Mój przykład użycia lambdas dla jasności)