2015-05-15 4 views
16

In meinem letzten Projekt, verwende ich rxJava und ich merke, dass observable.doOnError('onErrorCallback').subscribe(action) und observable.subscribe(action, 'onErrorCallback') verhalten sich auf unterschiedliche Weise. Auch von Docs ist es für mich nicht offensichtlich, was genau der Unterschied zwischen ihnen ist und wann ich die erste und zweite Variante verwenden soll.RxJava: was für einen Unterschied zwischen Rückrufe in doOnError ist (‚Rückruf‘) und abonnieren (*, ‚Callback‘)

Antwort

21

Der doOnError Operator ermöglicht es Ihnen, Nebenwirkung in die Fehlerausbreitung von einer Sequenz zu injizieren, aber die Fehlerfortpflanzung nicht selbst zu stoppen. Der Abonnent ist das endgültige Ziel der Ereignisse und sie "verlassen" die Sequenz.

Sie können den Nutzen von doOnError mit dem folgenden Beispiel sehen:

api.getData() 
.doOnError(e -> log.error(e)) 
.retry(2) 
.subscribe(...) 

Es Sie in den Fehler spähen ermöglicht aber können Sie im Falle eines Fehlers wiederholen. Mit einem Endteilnehmer:

api.getData() 
.subscribe(v -> {}, e -> log.error(e)); 

Sie müssen die Behandlung des Fehlers (neben der Protokollierung) auf eigene Art arrangieren.

0

Gemäß der Dokumentation doOnError nicht standardmäßig auf einem bestimmten Scheduler arbeitet

+2

Dies gilt für subscribe() als gut, aber ich denke auch, ist irrelevant für die Frage des OP. – akarnokd

Verwandte Themen