rxjava: Can I use retry() but with delay?

后端 未结 14 2266
别那么骄傲
别那么骄傲 2020-11-28 18:25

I am using rxjava in my Android app to handle network requests asynchronously. Now I would like to retry a failed network request only after a certain time has passed.

14条回答
  •  萌比男神i
    2020-11-28 19:13

    Based on kjones answer here is Kotlin version of RxJava 2.x retry with a delay as an extension. Replace Observable to create the same extension for Flowable.

    fun  Observable.retryWithDelay(maxRetries: Int, retryDelayMillis: Int): Observable {
        var retryCount = 0
    
        return retryWhen { thObservable ->
            thObservable.flatMap { throwable ->
                if (++retryCount < maxRetries) {
                    Observable.timer(retryDelayMillis.toLong(), TimeUnit.MILLISECONDS)
                } else {
                    Observable.error(throwable)
                }
            }
        }
    }
    

    Then just use it on observable observable.retryWithDelay(3, 1000)

提交回复
热议问题