2017-06-19 2 views
1

Ich habe 2 Service-Endpunkte in meiner Anwendung a und b (Beide sind "Singles"). Die Serviceanforderung b hängt von der Antwort a ab. Nach der Antwort von b brauche ich Zugriff auf beide Antworten in meinem Abonnenten. Ich plane, den Anruf wie dies zu tun:RxJava erhalten Ergebnis der vorherigen beobachtbaren in verketteten Netzwerk-Anfrage

services.a() 
    .flatMap(a -> services.b(a)) 
    .subscribe(b -> 
     // Access a and b here 
    ) 

Aber auf diese Weise, kann ich nur das Ergebnis von b in meinem Teilnehmer zugreifen. Wie kann ich auch die Antwort von a daran weitergeben?

Mein erster Versuch war, so etwas zu verwenden:

// Note: Code will not compile... Just to show the concept 
services.a() 
.flatMap(
    a -> Observable.combineLatest(
      Observable.just(a) 
      services.b(a).toObservable() 
      Bifunction((a, b) -> {return Pair<ResponseA, ResponseB>(a, b)}) 
     ) 
) 
.toSingle() 
.subscribe(pair -> { 
    ResponseA a = pair.first(); 
    ResponseB b = pair.second(); 
}) 

Aber als usecase bekommt ein wenig komplexer, wird der Code zu einem hässlichen Monster entwickeln.

Antwort

1

können Sie eine Variante von flatMap() mit resultSelector, resultSelector Methode verwenden, werden beide Eingangs sammeln (a) und Ausgabe (Ergebnis der beobachtbare b) des flatMap und Sie können sie zusammen, was auch immer Sie brauchen, kombinieren. siehe here.

Verwandte Themen