2016-06-27 7 views
0

Ich habe folgende Ströme:Erste Teilergebnisse nach auf Observablen mit concat

Observable<SomeResponseObject> method(){ 
    List<MyPojo> stream1... 
    Observable<List<MyPojo>> stream2... 

    return Observable.concat(Observable.from(stream1).toList(),stream2).map(users-> 
     createSomeResponseObject(users); 
} 

jedoch, wenn ich SomeResponseObject debuggen nur ich die Ergebnisse stream1 (fehlende Ergebnisse stream2) sehen

es die Ausführung über die Einheit-Testings:

 myClass.method().toBlocking().first(); 

stream2 erstellt auf diese Weise:

return Observable.from(Arrays.asList(new MyPojo("user7"))).toList(); 

Was fehlt mir bei der Verkettung dieser beiden Listen?

+0

Sind Sie sicher, dass die erste beobachtbare abgeschlossen ist? 'concat' wird die Elemente vom ersten Observablen bis zum Abschluss ausstrahlen, dann wird es mit den Elementen des zweiten Observablen beginnen. http://rxmarbles.com/#concat – LordRaydenMK

+0

@LordRaydenMK der erste, den ich bin in beobachtbar im laufenden Betrieb. wenn ich 'Benutzer' auf Debugger überprüfe, sehe ich nur die von Stream1 - das ist der erste richtig? – rayman

+0

Ja. Stream 2 sollte starten, nachdem Stream 1 abgeschlossen ist. Sie sollten 'merge' verwenden, wenn Sie Werte von beiden bei ihrem Eintreffen kombinieren möchten. – LordRaydenMK

Antwort

0

Sie haben zwei Elemente nach der Verkettung, aber sie warten nur auf die erste:

myClass.method().toBlocking().first(); 

Ich vermute, Sie beide warten wollen:

myClass.method().toBlocking().last(); 

oder beide bekommen auf einmal gepackt zusammen:

myClass.method().toList().toBlocking().first(); // returns List<List<MyPojo>> 
+0

ist nicht dort eine Möglichkeit zu "warten" beide Antworten in myClass.method() vor dem Zurückgeben? – rayman