初学者到RxJava,其中一个问题是调用一个返回observable boolean的方法。如果方法返回true而不是exit,如果为false则重试。它需要以延迟逻辑多次完成。例如,如果值为真,则每30秒重试一次。
这是我的可观察方法
@RxLogObservable
public rx.Observable<Boolean> checkForCatalogDownloadSuccess() {
return rx.Observable.create(new rx.Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
try {
String catalogDownloadStatus = mSnappyDBManager.getStringFromSnappy(SnappyDBManager.CATALOG_DOWNLOAD_STATUS);
CatalogDownloadStatus downloadStatus = CatalogDownloadStatus.valueOf(catalogDownloadStatus);
CatalogDownloadResponse catalogDownloadResponse = new CatalogDownloadResponse();
if(downloadStatus == CatalogDownloadStatus.SUCCESS ) {
subscriber.onNext(true);
}
else {
subscriber.onNext(false);
}
subscriber.onCompleted();
} catch (Exception ex) {
Timber.e(ex, null);
}
}
};
}
答案 0 :(得分:1)
如果您有一个Boolean
可观察对象并且想要重新订阅(比如3次)false
或者如果在一段时间内没有收到任何消息(例如5秒),那么您可以使用以下内容声明实现这一目标:
subscription = observable.map(s -> {
if (!s) {
throw new RuntimeException();
}
return true;
}).timeout(5, TimeUnit.SECONDS,scheduler)
.retry(3)
.take(1)
.subscribe(subscriber);
提供超时调度程序是可选的,但在您想要测试方法时会派上用场。