我有一个 Observable,如果不满足某个条件(即某个网站的响应不成功),我想终止它,以便我可以重新查询该网站,并再次调用该 observable。我该如何去做呢?
这就是我想做的:
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//Perform network actions here
if (!response.isSuccessful()) {
//terminate this Observable so I can retrieve the token and call this observable again
}
}
});
您可以使用retry http://reactivex.io/documentation/operators/retry.htmlRx 的运算符。并且不需要终止 Observable。
定义了一个自定义异常:
public class FailedException extends RuntimeException{
// ...
}
private static final int RETRY_COUNT = 3; // max retry counts
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//Perform network actions here
if (!response.isSuccessful()) {
// if response is unsucceed, invoke onError method and it will be stop emit data and into retry method.
subscriber.onError(new FailedException());
}
}
})
.retry((integer, throwable) -> {
// Retry network actions when failed.
// if return true, Observable will be retry to network actions emit data;
// if return false, you can process in onError() method of Subscribe.
return throwable instanceof FailedException && integer < RETRY_COUNT;
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)