У меня есть API, который принимает Observable
, запускающий событие.
Я хочу вернуть Observable
, который выдает значение каждые defaultDelay
секунды, если обнаружено подключение к Интернету, и задерживает numberOfFailedAttempts^2
раз, если подключение отсутствует.
Я пробовал кучу различных стилей, самая большая проблема, с которой я столкнулся, - это retryWhen's
наблюдаемое оценивается только один раз:
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();
Есть ли способ сделать то, что я пытаюсь сделать? Я нашел связанный вопрос (сейчас не могу найти его в поиске), но выбранный подход, похоже, не работает с динамическим значением.
flatMap
. См. Последний пример в этой статье для очень похожего шаблона. 17.01.2017counts
было то, что получило FlatMap'ed 17.01.2017