niqo01
04/08/2021, 3:06 AMretry
based on a valid emitted value and not based on exception occuring?
My emitted value looks like this
public sealed class BillingClientState{
public object Initializing: BillingClientState()
public data class Available(val client: BillingClient): BillingClientState()
public object Unavailable: BillingClientState()
public object Disconnected: BillingClientState()
}
I want rety when Disconnected is triggeredephemient
04/08/2021, 3:28 AM.onEach { check(it !is Disconnected) }.retry(...)
.transformWhile
fun <T> Flow<T>.retryWhen(predicate: suspend (T) -> Boolean) = transformWhile { if (predicate(it)) { emitAll(retryWhen(predicate)); false } else { emit(it); true } }
Arun Joseph
01/21/2023, 9:13 PMretryWhen
but did not work.ephemient
01/21/2023, 9:21 PMfun <T> Flow<T>.retryWhen(retries: Int = Int.MAX_VALUE, predicate: suspend (T) -> Boolean): Flow<T> {
require(retries >= 0)
return if (retries == 0) this else transformWhile {
if (predicate(it)) {
emitAll(retryWhen(retries - 1, predicate))
false
} else {
emit(it)
true
}
}
}
Arun Joseph
01/21/2023, 9:25 PM