J'ai une méthode qui crée et fusionne deux Observable<T>
.Traitement des erreurs RxJava
private Observable<String> getData() {
Observable<String> observable1 = Observable.just("Just string")
.delay(2, TimeUnit.SECONDS);
Observable<String> observable2 = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onError(new Exception("Oops!"));
}
});
Observable<String> merged = observable1.mergeWith(observable2);
return merged;
}
Le problème est que l'erreur dans le observable2
émis plus tôt que les données contenues dans le observable1
.
getData().subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.d("rx", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.d("rx", "onError: " + e.getMessage());
}
@Override
public void onNext(String s) {
Log.d("rx", "onNext: " + s);
}
});
observable2
émis des données facultatives et les erreurs de observable2
ne doit pas mettre fin à l'émission, mais d'autre part, je veux gérer toutes les erreurs et les données dans un seul observateur. Puis-je retourner cette erreur après le résultat du observable1
? Est-ce possible?
résultats: Expect
onNext: Just string
onError: Oops!
Vous devriez probablement en dire plus sur pourquoi c'est le cas –
Peut-être que ce serait une bonne explication de Observable.mergeDelayError(): https://github.com/dawidgdanski/rx-java-handies/blob/master/src /test/java/io/github/dawidgdanski/sample/rx/observable/MergeContractTest.java#L155 –