是否可以重新订阅 Observable 并收到错误?
Observable<T> retry()
方法重新订阅可观察对象,但它消耗了错误。
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();
}
});
onError
部分observable
从未被调用,因为 .retry()
消耗错误。
最佳答案
您正在寻找的是 retryWhen()
。这允许您传递一个 Func1
,它为您提供 Throwable
,这意味着您可以将 onError
逻辑放在那里。
这是一个很好的article .
关于java - 收到错误并重新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671783/