错误处理操作符
catch、retry
实例与功能介绍
1. catch操作符
代码实例
Observable observable = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i=0;i<10;i++){
if (i>2){
subscriber.onError(new Throwable("test"));
}
subscriber.onNext(i);
}
subscriber.onCompleted();
}
});
observable = observable.onErrorReturn(new Func1<Throwable,Integer>() {
@Override
public Integer call(Throwable o) {
return 13;
}
});
结果
结果: 0
结果: 1
结果: 2
结果: 13
结束
功能:catch操作符拦截原始Observable的onError通知,将他替换为其他数据项或数据序列,让Observable能够正常终止或者根本不终止。
onErrorReturn:
Observable遇到错误时使用备用的Observable,忽略原有Observable的onError调用;会调用一个特殊的项并调用观察者的onCompleted方法。onErrorResumeNext:
Observable遇到错误时使用备用的Observable,忽略原有Observable的onError调用;发射备用Observable的数据。onExceptionResumeNext:
和onErrorResumeNext
类似。不同的是如果onError收到的异常不是Exception时,不会使用备用的Observable,而是把错误数据传递给观察者的onError方法。
2. retry操作符
代码实例
Observable observable = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i=0;i<10;i++){
if (i>2){
subscriber.onError(new Throwable("test"));
}
subscriber.onNext(i);
}
subscriber.onCompleted();
}
});
observable = observable.retry(2);
结果
结果: 0
结果: 1
结果: 2
结果: 0
结果: 1
结果: 2
结果: 0
结果: 1
结果: 2
异常
功能:retry操作符不会将原始Observable的onError传递给观察者,它会订阅这个Observable,再给他一次机会无错误地重新完成其数据序列。
网友评论