我有一個需要觸發事件的Observable
的API。RxJava中的指數退避
我想返回Observable
,如果檢測到Internet連接,則每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();
有沒有辦法做什麼,我試圖做的?我發現了一個相關的問題(目前找不到它),但採取的方法似乎不適用於動態值。
問題中的示例可能來自我嘗試的中間,因爲它似乎混合了我使用的兩種方法(一個定時器+重試,一個間隔+延遲訂閱),問題實際上來自該文章,該文章說應該再次使用可重試/重複觀察的輸入。不使用泄露訂閱的可觀察原因問題? –
@AssortedTrailmix這是關於第一級輸入,而不是關於內部'flatMap'。請參閱該文章中的最後一個示例,瞭解非常相似的模式 –
哦,我明白了,對不起,我錯過了'count'是什麼得到flatMap'ed –