fertig Lassen Sie uns zwei Methoden nehmen mit Rx geschrieben:andthen ausgeführt, bevor komplettierbar
Maybe<Foo> getFooFromLocal
Single<Foo> getFooFromNetwork
Ich möchte eine Kette schreiben, wenn wir unsere lokalen Speicher für Foo überprüfen. Wenn wir keine Foo haben, sollten wir es aus dem Netzwerk holen, dann speichern Sie es in den lokalen Speicher und wieder aus dem lokalen Speicher und übergeben Sie es an unseren Abonnenten.
storage
.getFooFromLocal()
.switchIfEmpty(network.getFooFromNetwork().map { it[0] }
.flatMapCompletable { storage.saveFoo(it) }
.andThen(storage.getFooFromLocal()))
.subscriber(/**/)
Das Problem ist, dass andThen
Teil vor komplettierbar in flatMapCompletable
vergangen abgeschlossen ist. Ich habe herausgefunden, dass ich dieses Problem loswerden kann, wenn ich in Maybe.defer{}
einpacken. Aber nach der Dokumentation von andThen
es
Gibt ein
Maybe
, die zu diesem komplettierbar abonnieren werden.
Und vielleicht ist schon
eine latente Stellt Berechnung und Emission eines vielleicht Wertes oder Ausnahme
Die Frage ist also, warum mein andThen
Teil Lauf vor komplettierbar fertig. Und was ist der beste und eleganteste Weg solche Ketten zu schreiben.
Anrufliste:
06:05:58.803 getFooFromLocal
06:05:58.804 getFooFromLocal
06:05:58.804 getFooFromNetwork
06:05:59.963 saveFoo
Ihr 'storage.getFooFromLocal()' wird wahrscheinlich über 'Maybe.just (cachedValue) 'implementiert, das ausgeführt wird, bevor eine RxJava-Aktivität überhaupt gestartet wurde. – akarnokd
GetFooFromLocal implementiert über 'Maybe.create' Hier ist der Code der vielleicht Erstellung ' Maybe.create {s -> if (this! = Null) s.onSuccess (this); s.onComplete()} ' – Sunstrike
' storage.getFooFromLocal() 'erscheint zweimal in Ihrer Codebasis, warum denken Sie,' andThen' ist verantwortlich? – akarnokd