mit dem folgenden Code:CombineLatest und kalt Observablen
Observable<String> obs1 = Observable.just("1", "2", "3");
Observable<String> obs2 = Observable.just("a", "b");
Observable.combineLatest(obs1,
obs2,
(s1, s2) -> s1 + ":" + s2
).subscribe(System.out::println);
ich erwarten würde es so etwas wie die folgenden drucken:
1:a
2:a
3:a
3:b
Aber es druckt
3:a
3:b
Warum ist erste Observable nur die letzte Position emittieren? Vor combinateLatest gibt es keine aktiven Abonnements, daher sollte es kalt sein. Wie kann ich sicherstellen, dass alle Objekte aus beiden Observablen miteinander kombiniert sind?
Naja, eigentlich mein Code funktioniert, weil meine Quelle ist nicht synchron, ich auf diese stolperte, wenn sie versuchen zu schreiben ein Test dafür.
Was ich versuche zu erreichen, ist folgendes:
* Abfrage Mongodb, um eine Observable mit einem Strom von bestehenden IDs zu bekommen. * Abfrage AWS s3, um eine Observable mit einem Strom von Dateinamen zu erhalten * für jede s3-Datei, überprüfen Sie, ob der Dateiname in Mongo existiert. Wenn nicht, entferne die Datei von s3.
– grub@akarnokd: mit deiner flatMap wird 'obs2' nur abonnieren, nachdem der erste Wert von' obs1' ausgegeben wurde. Bei 'combineLatest' ist das Abonnement sequenziell. Gibt es einen Weg, "obs2" direkt nach dem "obs1" -Abonnement zu abonnieren? – dwursteisen