是否可以重新订阅Observable并获取错误?
Observable<T> retry()
方法重新订阅了observable,但它消耗了错误。
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
的{{1}}部分,因为observable
会消耗错误。
答案 0 :(得分:1)
您正在寻找的是retryWhen()
。这样,您就可以传递Func1
Throwable
来提供onError
,这意味着您可以将<script>
jQuery(document).ready(function($) {
$('#your-checkbox').change(function(e) {
/* Your ajax call goes here */
});
});
</script>
逻辑放在那里。
这是一个很好的article。