Observable.retrywhen 中的异常类型
exception type in Observable.retrywhen
我是 rxJava 的新手,这可能是一个非常愚蠢的问题,但我无法弄清楚如何在重试时找到异常类型。
我想在特定异常(例如 Io 异常)上重试,但在其他异常上重试
我想将异常传递到链中。
public Observable<List<String>> getData()
{
return apiConsumer.getData()
.retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>()
{
@Override
public Observable<?> call(Observable<? extends Throwable> observable)
{
// if(exception type == io exception)
return observable.delay(5, TimeUnit.SECONDS);
//else
// dont retry, pass the exception to onError
}
});
}
您可以检查异常类型,如下面的代码所示。 flatMap
中的 lambda 将为每个错误调用,您可以在其中通过 instanceof
检查类型。我已经有一段时间没有使用 RXJava 了,也没有测试你的 return observable.delay(5, TimeUnit.SECONDS);
是否仍然可以工作 fyi :)
public Observable<List<String>> getData() {
return apiConsumer.getData().retryWhen(errors -> errors.flatMap(error -> {
// This lambda will be called for each error. Check the type:
if (error instanceof IOException) {
return observable.delay(5, TimeUnit.SECONDS);
}
//Dont retry, pass the exception to onError
})
)
}
我的回答基于 this tutorial,它提供了有关该主题的更多信息。
试试下面的代码:
return apiConsumer.getData().retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> observable) {
return observable.flatMap(new Func1<Throwable, Observable<?>>() {
@Override public Observable<?> call(Throwable throwable) {
if(throwable instanceof IOException) {
// Retry code
// For example: retry after 5seconds
return Observable.timer(5, TimeUnit.SECONDS);
}
// Pass the throwable
return Observable.error(throwable);
}
});
}
});
我是 rxJava 的新手,这可能是一个非常愚蠢的问题,但我无法弄清楚如何在重试时找到异常类型。 我想在特定异常(例如 Io 异常)上重试,但在其他异常上重试 我想将异常传递到链中。
public Observable<List<String>> getData()
{
return apiConsumer.getData()
.retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>()
{
@Override
public Observable<?> call(Observable<? extends Throwable> observable)
{
// if(exception type == io exception)
return observable.delay(5, TimeUnit.SECONDS);
//else
// dont retry, pass the exception to onError
}
});
}
您可以检查异常类型,如下面的代码所示。 flatMap
中的 lambda 将为每个错误调用,您可以在其中通过 instanceof
检查类型。我已经有一段时间没有使用 RXJava 了,也没有测试你的 return observable.delay(5, TimeUnit.SECONDS);
是否仍然可以工作 fyi :)
public Observable<List<String>> getData() {
return apiConsumer.getData().retryWhen(errors -> errors.flatMap(error -> {
// This lambda will be called for each error. Check the type:
if (error instanceof IOException) {
return observable.delay(5, TimeUnit.SECONDS);
}
//Dont retry, pass the exception to onError
})
)
}
我的回答基于 this tutorial,它提供了有关该主题的更多信息。
试试下面的代码:
return apiConsumer.getData().retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> observable) {
return observable.flatMap(new Func1<Throwable, Observable<?>>() {
@Override public Observable<?> call(Throwable throwable) {
if(throwable instanceof IOException) {
// Retry code
// For example: retry after 5seconds
return Observable.timer(5, TimeUnit.SECONDS);
}
// Pass the throwable
return Observable.error(throwable);
}
});
}
});