Rxでの処理内で何かしらのエラーが発生した場合に一定時間待機してから一定回数リトライし、それでもエラーの場合はエラーを流すといった処理をします。
毎回書き方を忘れてしまうので下記に残します。
下記のretryWhenError()メソッドをrxのretryWhenの引数にいれればOKです。
private fun retryWhenError(): Function<Observable<out Throwable>, Observable<Any>> {
return Function { observable ->
observable.zipWith(Observable.range(0, N + 1),
BiFunction<Throwable, Int, Pair<Throwable, Int>> { throwable, integer ->
Pair(throwable, integer)
})
.flatMap<Any> { throwableIntegerPair ->
if (throwableIntegerPair.second < N) {
Observable.timer(X, TimeUnit.SECONDS)
} else {
Observable.error(throwableIntegerPair.first)
}
}
}
}