如果发生超时异常,重新订阅一个可观察对象
Resubscribing an observable if timeout exception occurs
我正在对 return 一个可观察对象进行改造,这是对服务器的 REST API 调用的结果。出现请求超时异常,observable 停止执行是很常见的。如果异常是特定类型,如何重新订阅重试
myObservable
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
//retry and resend call to server if e is request timeout exception
}
您可以使用 retry 运算符。
示例:
myObservable
.retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException)
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
}
在示例中,它会在 SocketTimeoutException
最多 3 次时重新订阅。
或没有 lambda:
myObservable
.retry(new Func2<Integer, Throwable, Boolean>() {
@Override
public Boolean call(Integer retryCount, Throwable throwable) {
return retryCount < 3 && throwable instanceof SocketTimeoutException;
}
})
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
}
我正在对 return 一个可观察对象进行改造,这是对服务器的 REST API 调用的结果。出现请求超时异常,observable 停止执行是很常见的。如果异常是特定类型,如何重新订阅重试
myObservable
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
//retry and resend call to server if e is request timeout exception
}
您可以使用 retry 运算符。
示例:
myObservable
.retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException)
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
}
在示例中,它会在 SocketTimeoutException
最多 3 次时重新订阅。
或没有 lambda:
myObservable
.retry(new Func2<Integer, Throwable, Boolean>() {
@Override
public Boolean call(Integer retryCount, Throwable throwable) {
return retryCount < 3 && throwable instanceof SocketTimeoutException;
}
})
.subscribe(new Subscriber<Something> sub(){
@override
void onNext(Something something){
//do something with something
}
@override
void onError(Throwable e){
}