Fehlerbehandlung für gezippte Observables

8

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):

%Vor%

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?

    
wujek 13.06.2015, 19:21
quelle

1 Antwort

5

Zunächst müssen Sie Subscriber über einen Fehler benachrichtigen, indem Sie subscriber.onError method:

aufrufen %Vor%

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 :

%Vor%

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:

%Vor%     
Vladimir Mironov 14.06.2015, 11:11
quelle

Tags und Links