Ich suche ein Beispiel für einen Fluss, den ich mit Hilfe von RxJava implementieren möchte.RxJava Netzwerkanforderungen und Caching
Angenommen, ich möchte eine Liste von Daten anzeigen. Der Ablauf sollte in etwa so aussehen:
- Cache lesen. Wenn es die Daten enthält, zeigen Sie es an;
eine API-Anfrage an den Server senden:
Wenn es die Daten zurückgegeben, es dann und es zeigen zwischenzuspeichern.
Wenn es zurückgegeben und Fehler, und es gab keine im Cache gespeicherten Daten zeigen dann einen Fehler.
Wenn es zurückgegeben und Fehler und es war etwas im Cache gespeichert, dann nichts zu tun.
Im Moment habe ich ein method that does something similar (mit viel Inspiration von Jake's u2020). Der Hauptunterschied besteht darin, dass das In-Memory-Caching verwendet wird, so dass kein separates Observable
zum Lesen aus dem Cache benötigt wird. Dies kann auch synchron erfolgen.
Ich weiß nicht, wie zwei Observablen kombinieren (eine für aus dem Cache und die andere für API-Aufruf zu lesen) und die oben beschriebene Strömung erhalten.
Irgendwelche Vorschläge?
Sieht aus, Sie brauchen 'amb': https://github.com/ReactiveX/RxJava/wiki/Conditional-and-Boolean-Operators#amb – zsxwing
@zsxwing könnten Sie ein Beispiel geben?Ich bin offen für Vorschläge, obwohl ich eine Antwort gefunden habe (die nicht perfekt ist). –
Ich würde die Cache-Behandlung eher dem Netzwerk-Client überlassen. Wenn Sie HTTP verwenden, gibt es Header in der Antwort, die dediziert sind, um dem Client anzuzeigen, welche Art von Cache implementiert werden soll, wie lange das Objekt aufbewahrt werden soll. Nicht zu vergessen, dass es auch die Möglichkeit gibt, zu überprüfen, ob Ihr Cache ist noch gültig und aktualisieren Sie es bei Bedarf (Rückgabecode 304). – njzk2