Ist es möglich, ein Observable erneut zu abonnieren und den Fehler zu erhalten?Fehler erhalten und erneut abonnieren
Die Methode Observable<T> retry()
führt das Observable erneut durch, aber es verbraucht den Fehler.
final PublishSubject<Integer> observable = PublishSubject.create();
observable
.flatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(final Integer integer) {
if (integer % 2 == 0) {
return Observable.just(integer);
} else {
return Observable.error(new Exception("int: " + integer));
}
}
})
.retry()
.subscribe(new Action1<Integer>() {
@Override
public void call(final Integer integer) {
Timber.i("integer: %d", integer);
}
},
new Action1<Throwable>() {
@Override
public void call(final Throwable throwable) {
Timber.e(throwable, "throwable");
}
},
new Action0() {
@Override
public void call() {
Timber.w("onCompleted");
}
});
Observable
.range(0, 10)
.delay(2, TimeUnit.MILLISECONDS)
.subscribe(new Action1<Integer>() {
@Override
public void call(final Integer integer) {
observable.onNext(integer);
}
},
new Action1<Throwable>() {
@Override
public void call(final Throwable throwable) {
observable.onError(throwable);
}
},
new Action0() {
@Override
public void call() {
observable.onCompleted();
}
});
Der onError
Teil observable
heißt nie, weil .retry()
den Fehler verbraucht.