/ / Compondo observáveis ​​no RxJava Android - android

Compondo observables no RxJava Android - android

Eu tenho adaptado meu aplicativo Android para usar o RxJava, mas estou tendo um pouco de dificuldade em fazê-lo. Como eu tinha sido aconselhado em um post anterior (Aguarde todos os pedidos no Android VolleyEu estou usando o Observables para imitar a interface com minha API REST em JavaScript. Especificamente, usando a biblioteca de promessas, eu componho chamadas assim:

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

Neste exemplo, eu consultar dois recursossimultaneamente, coletar os resultados e, em seguida, coletar um terceiro recurso com base em alguns dos parâmetros dos recursos coletados anteriormente. O melhor que eu consegui fazer para imitar isso no RxJava é assim:

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

Mas eu estou lutando para compô-los como eu fiz emJavaScript. Preciso simplesmente criar um segundo observável e inscrevê-lo no retorno de chamada do zip? Isso é o que eu estou fazendo agora, e funciona, mas eu gostaria de saber se há uma maneira mais elegante e mais reativa de estruturar meus pedidos.

Respostas:

1 para resposta № 1

o .then método da promessa pode ser transposto para flatMap método em RxJava

Então, o que você pode fazer é zip então flatMap então flatMap

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

Por favor note que fetchA(), fetchB(), fetchC() return Observables.

(Meu exemplo usa lambdas para maior clareza)