Ich habe ein Observable, das etwas tut, ohne einen Wert ausgeben zu müssen. Außerdem habe ich eine Liste von Objekten, mit denen das Observable arbeiten soll. Also für alle Elemente in dieser Liste: doSomething ()
%Vor%Und die Methode, die das Observable erstellt:
%Vor%Wenn ich das jetzt mit einer Liste mit 3 Elementen starte, bekomme ich:
%Vor%was gut ist, weil das genau das ist, was ich wollte, aber ich weiß nicht, warum es funktioniert. Zuerst habe ich angefangen, OnComplete anzurufen, weil am Ende das Observable seine Arbeit erledigt und vervollständigt. Aber dann wird onNext natürlich nie auf den Abonnenten gerufen. Das Gleiche gilt für den umgekehrten Fall.
Meine Fragen sind also:
onComplete
wird für das letzte Element aufgerufen, weil dann das früheste Observable in der Kette ( from(uris)
) beendet ist.
Es wird erwartet, dass Ihre Observablen, die von flatMap
ausgegeben werden, onComplete
aufrufen. Sobald das erledigt ist (und call
zurückgegeben wurde), kann an der nächsten Emission von from
gearbeitet werden. Sobald from
die Ausgabe von Observablen beendet hat, ruft sie onComplete
auf und die Kette ist effektiv beendet.
Ich denke, dieser kleine Code hilft Ihnen, das Verhalten von onNext( )
und onComplete()
zu verstehen.
Angenommen, Sie haben List<Uri>
. Lassen Sie uns das in Observable<Uri>
manuell umwandeln.
Oder Lambda-Ausdrücke verwenden:
%Vor% Wie Sie sehen, wiederholen wir die Eingabeliste und rufen onNext( )
für jedes Element auf. Nachdem wir unsere List
in Observable
umgewandelt haben, haben wir onComplete()
P.S.
Dieser Code ist nur eine Demonstration, verwende ihn niemals , um List
in Observable
zu transformieren. Verwenden Sie dafür den Operator Observable.from()
.
AKTUALISIEREN :
Operator from( )
Implementierung:
link: Ссылка
Tags und Links android reactive-programming rx-java