2016-06-22 11 views
6

Es ist nicht klar, wie Fehler an Abonnenten in REactiveX weitergeleitet werden, so dass das Observable nicht zerstört wird.ReactiveX: Fehlerbehandlung, die das Observable nicht zerstört

Beispiel

observable.onNext(1); 
observable.onNext(2); 
observable.onError("Nope"); 
observable.onNext(3);<<won't work. 

Ich nehme diese Einschränkung, da es ein Fehler wissen aufgetreten ich noch Szenario, wo ich Zuhörer wollen UND Ich will nicht die beobachtbare sterben, aber stromabwärts. Der Hauptanwendungsfall dafür ist der UI-Code. Wenn ein Fehler auftritt, möchte ich "Setup" nicht mit allen Observablen aufrufen müssen, für die es zuvor registriert wurde.

Mögliche Alternativen sind

a) schieben ein benutzerdefiniertes Objekt, das ein Datenfeld und ein Fehlerfeld

class Data 
{ 
    int value; 
    Error * error; 
} 

ich nicht mag diese Lösung

b) Haben zwei Ströme hat. Eine für Daten und eine für Fehler.

observable.onNext(1); 
observable.onNext(2); 
errorObservable.onNext("Error"); 
observable.onNext(3); 

Was sind die besten gängigen Praktiken dafür?

Antwort

1

Ich würde definitiv mit der Option A) gehen - ein Objekt erstellen, das sowohl Daten und/oder Fehler tragen kann. Ich bin egal, wie Sie die Daten und mögliche Fehler in das Objekt wickeln, aber beide durch einen Stream als onNext() Ereignisse senden ist die richtige Lösung, die den Abonnenten alle Informationen und alle Freiheit gibt, damit umzugehen.

Die B) -Option könnte in komplexeren asynchronen Szenarien ziemlich schwierig zu implementieren sein und würde wahrscheinlich dazu führen, dass viele Subject s verwendet werden, was ebenfalls schlecht ist.

0

Wenn Sie einfach retry() zur beobachtbaren Quelle hinzufügen, muss der Abonnent nicht erneut abonnieren.

Verwandte Themen