【发布时间】:2017-01-16 14:43:10
【问题描述】:
我有一个 API,它接受一个触发事件的 Observable。
如果检测到 Internet 连接,我想返回一个 Observable,它每 defaultDelay 秒发出一个值,如果没有连接,则延迟 numberOfFailedAttempts^2 次。
我尝试了很多不同的样式,我遇到的最大问题是retryWhen's observable 只评估一次:
Observable
.interval(defaultDelay,TimeUnit.MILLISECONDS)
.observeOn(Schedulers.io())
.repeatWhen((observable) ->
observable.concatMap(repeatObservable -> {
if(internetConnectionDetector.isInternetConnected()){
consecutiveRetries = 0;
return observable;
} else {
consecutiveRetries++;
int backoffDelay = (int)Math.pow(consecutiveRetries,2);
return observable.delay(backoffDelay, TimeUnit.SECONDS);
}
}).onBackpressureDrop())
.onBackpressureDrop();
有什么方法可以做我想做的事吗?我发现了一个相关的问题(现在找不到它),但所采取的方法似乎不适用于动态值。
【问题讨论】:
标签: java java-8 rx-java exponential-backoff