Mein Anwendungsfall ist: Ich erhalte eine Liste von Permalinks und muss pro Permalink zwei REST-Anfragen ausgeben, um ihre Daten in Teilen zu erhalten. Wenn beide Anfragen zurück sind, möchte ich ihre Informationen zusammenführen und etwas damit machen (hier - drucken Sie es aus). Ich möchte es mit Code mit dem Operator zip
machen. Hier ist mein aktueller Code (zusammen mit Mocks für die Bibliothek, die ich benutze):
Im Allgemeinen funktioniert es, aber ich mag die Fehlerbehandlung in dieser Implementierung nicht. Grundsätzlich können die REST-Anforderungen fehlschlagen. In diesem Fall ruft die onFailure
-Methode subscriber.onNext(null)
auf, so dass die zip
-Methode immer etwas zum Arbeiten hat (eine Anfrage ist möglicherweise fehlgeschlagen, die andere möglicherweise nicht, und I weiß nicht, was gescheitert ist). Dann brauche ich in der Funktion zip
eine if
, die überprüft, dass beide nicht null
sind (mein Code stürzt ab, wenn einer der partiellen Content
s null
ist).
Ich möchte in der Lage sein, die null
mit dem filter
-Operator irgendwo herauszufiltern, wenn das möglich ist. Oder vielleicht gibt es einen besseren Weg, als null
-Werte für den Fehlerfall auszugeben, aber damit es immer noch mit der Funktion zip
funktioniert?
Zunächst müssen Sie Subscriber
über einen Fehler benachrichtigen, indem Sie subscriber.onError
method:
Auch wenn Sie nicht möchten, dass der gesamte Stream fehlschlägt, müssen Sie immer noch eine Methode subscriber.onError()
aufrufen. Es gibt einige andere Möglichkeiten, die Fehler zu beheben. Einer von ihnen ist ein Operator onErrorResumeNext
:
BEARBEITEN
Ich habe noch eine letzte Frage: Wenn Sie meinen Reißverschluss bemerken, komme ich zurück Observable.empty () wenn die beiden Objekte nicht gezippt werden können, und einmal ich Inhalt zurückgeben. Das scheint falsch zu sein. Wie soll ich mit einem solchen Fehler umgehen? Bedingungen in der Reißverschlussfunktion?
Ja, die Rückgabe von Observable.empty()
ist völlig falsch. Eine Ausnahme von zip
function zu werfen scheint die beste Lösung zu sein:
Tags und Links rx-java