Ich habe eine Liste von Dateien, die ich von einem Android-Gerät in das Backend hochladen möchte. Aufgrund von Speicherbeschränkungen möchte ich den zweiten API-Aufruf erst nach dem ersten, dem dritten nach dem zweiten und so weiter machen.
Ich habe etwas wie
geschrieben %Vor%Aber ich glaube, das könnte gegen den Geist von Rx gehen, und das Sprichwort ist, wenn Sie Observable.create verwenden, machen Sie es wahrscheinlich falsch ... Ist das ein vernünftiger Ansatz? Gibt es einen besseren Weg, dies mit Retrofits RxJava-Integration zu erreichen?
Naiv, würde ich das tun (es funktioniert aber nicht, siehe unten):
%Vor%Nun besteht das Problem, dass es keine Möglichkeit gibt, Retrofit mitzuteilen, nur einen Thread für diese Anrufe zu verwenden.
reduce
übergibt jedoch das Ergebnis eines Funktionsaufrufs zusammen mit dem nächsten vom ursprünglichen Observablen ausgegebenen Wert an den nächsten. Das würde funktionieren, aber die an reduce
übergebene Funktion muss synchron sein. Nicht gut.
Ein anderer Ansatz wäre, die Observable rekursiv zu modifizieren:
%Vor%ungefähr. Aber ich bin mir nicht sicher, wie ich es reinigen soll, um es lesbarer zu machen.
Das sauberste, was ich denken würde, wäre etwa so:
%Vor% Die Eingeborenen von RxJava würden alle Gegenstände in Observable.from(...)
so aussenden, als ob sie parallel wären. Das ist der beste Weg, um es als parallele Emission zu betrachten. Einige Fälle erfordern jedoch eine konsequente Ausführung der gesamten Kette. Ich bin zu folgender Lösung gekommen, wahrscheinlich nicht die beste, aber funktionierend.
Beispiel Verwendung wäre:
%Vor%Diese Methode garantiert verkettete Ausführungen von
Observable<Dummy> someFunctionReturnsObservable(Model model)