Erik
04/21/2021, 7:08 PMGetting value
tick 100
tick 200
0
tick 300
tick 400
1
Got value
tick 500
tick 600
A2
tick 700
tick 800
A3
tick 900
tick 1000
A4
The desired output
Getting value
tick 100
tick 200
0
tick 300
tick 400
1
Got value
A1 // <-- immediately emit and combine the value and the last emission from the upstream flow
tick 500
tick 600
A2
tick 700
tick 800
A3
tick 900
tick 1000
A4
Erik
04/21/2021, 7:09 PMErik
04/21/2021, 7:10 PMflow
emissionbaxter
04/21/2021, 7:48 PMbaxter
04/21/2021, 7:49 PMfoo()
and setting it on a StateFlow
, then using combine
. Since the initial value of the state flow is null
, we just emit as normal, but as soon as foo()
is complete, the state flow will emit the change.baxter
04/21/2021, 7:50 PMval fooFlow = flow {
emit(null)
emit(foo())
}
and combining on that flow (instead of using state flow)Erik
04/21/2021, 8:10 PMval isGetValueSlow = true
to false
.... It means that foo
is fast, but you can see ticks before the first value from foo
is collected. I'd like to collect the first value from foo
ASAP if it comes firstbaxter
04/21/2021, 8:14 PMflow
emit null
on start, and only emit the item that has a value, or bothbaxter
04/21/2021, 8:16 PMnull
, but only return the one that has a non-null value. If both are non-null, emit your combined value. If both are null, just filter it out.Erik
04/21/2021, 8:32 PMErik
04/21/2021, 8:32 PMErik
04/21/2021, 8:32 PMErik
04/21/2021, 8:33 PMT
in Flow<T>
or foo(): T
is nullableErik
04/21/2021, 8:34 PMval x = mutableListOf<T>()
instead of a lateinit var
to store the provided and last value, but that's yet another inefficiencyuli
04/22/2021, 8:04 PMErik
04/23/2021, 3:52 PMuli
04/23/2021, 7:52 PM