kluck
05/13/2020, 8:01 AMfun <T, E> IO<T>.setState(handleError: (Throwable) -> E, onSuccess: (T) -> IO<Any>) = IO.fx {
val state = !this@setState.attempt()
state.fold(
{ handleError(it) },
{
// Other stuff happening…
!onSuccess(it)
}
)
}
@Test
fun test() {
val handleError = { t: Throwable -> println("Error: ${t.message}") }
val onSuccess = { bool: Boolean ->
IO.fx {
println("Starting")
!effect { delay(5000) } // --> SwitchMapping should happen around here
println("Finished with value $bool")
}
}
// Here, this is what I don't know how to "Observablify" to send multiple events
IO.just(true).setState(handleError, onSuccess).unsafeRunAsync {}
IO.just(false).setState(handleError, onSuccess).unsafeRunSync()
}
What I expect is:
Starting
Starting
Finished with value false // The other one should be "switchMapped"
I don't know how to have some kind of flow or observable with arrow, and I don't know how to switch map within it. Any guidance?pakoito
05/13/2020, 9:42 AMIO
is for single results, so flatMap is switchMappakoito
05/13/2020, 9:42 AMkluck
05/13/2020, 12:10 PMpakoito
05/13/2020, 12:15 PMpakoito
05/13/2020, 12:15 PMpakoito
05/13/2020, 12:16 PMconcatMap
semantics by defaultpakoito
05/13/2020, 12:16 PMswitchMap
on top of itpakoito
05/13/2020, 12:19 PMEDIT OUT
pakoito
05/13/2020, 12:22 PMpakoito
05/13/2020, 12:25 PMpakoito
05/13/2020, 12:25 PMpakoito
05/13/2020, 12:25 PMpakoito
05/13/2020, 12:28 PM