Я пытаюсь использовать операцию .retryWhen()
, чтобы повторить вызов API в случае сбоя 3 раза каждые 5 секунд. Может ли кто-нибудь помочь мне с этим делом, поскольку я не могу понять это в течение последних нескольких часов.
.retryWhen { errors ->
errors
.zipWith(Observable.range(1, 3), { _: Throwable, i: Int -> i })
.flatMap { retryCount: Int ->
Observable.timer(
5.0.pow(retryCount.toDouble()).toLong(),
TimeUnit.SECONDS
)
}
}
Я получаю
None of the following functions can be called with the arguments supplied:
@CheckReturnValue @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: ((Observer<in Int!>) -> Unit)!, p1: ((Throwable, Int) -> ???)!): Observable<(???..???)>! defined in io.reactivex.Observable
@CheckReturnValue @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: ObservableSource<out Int!>!, p1: BiFunction<in Throwable!, in Int!, out (???..???)>!): Observable<(???..???)>! defined in io.reactivex.Observable
@CheckReturnValue @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: (Mutable)Iterable<(???..???)>!, p1: BiFunction<in Throwable!, in (???..???), out (???..???)>!): Observable<(???..???)>! defined in io.reactivex.Observable
@CheckReturnValue @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: (Mutable)Iterable<Int!>!, p1: ((Throwable, Int) -> ???)!): Observable<(???..???)>! defined in io.reactivex.Observable
Я также вставляю весь код, который пытался выполнить:
private fun getOrderDetails(uuid: String) {
apiClient.getOrderDetailsUsingUUID(uuid)
.retryWhen { errors ->
errors
.zipWith(Observable.range(1, 3), { _: Throwable, i: Int -> i })
.flatMap { retryCount: Int ->
Observable.timer(
5.0.pow(retryCount.toDouble()).toLong(),
TimeUnit.SECONDS
)
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ webOrderRequest ->
_currentOrder.value = OrderState.OrderDetails(webOrderRequest.order!!)
orderStatus(uuid, webOrderRequest.order)
},
{ error ->
_currentOrder.value = OrderState.Error(getErrorMessage(error))
Log.e(TAG, getErrorMessage(error))
}
)
}