这里有sourceFlow
,我使用flatMapLatest
根据sourceFlow
的值生成新的流.
而collect()
没有任何价值.此代码不打印任何内容.
fun main() {
fun createNewFlow(): MutableSharedFlow<String> = MutableSharedFlow()
runBlocking {
val sourceFlow = MutableSharedFlow<Int>()
// flow for transform
val set = mapOf(
1 to createNewFlow(),
2 to createNewFlow(),
3 to createNewFlow()
)
launch {
// get flow from set by number from sourceFlow
val res = sourceFlow.flatMapLatest { set[it]!! }
res.collect {
println(it)
}
}
launch {
sourceFlow.emit(1)
set[1]!!.emit("1")
set[1]!!.emit("1")
sourceFlow.emit(2)
set[2]!!.emit("2")
set[2]!!.emit("2")
}
}
}
如果我将flatMapLatest
更改为flatMapConcat
,我会看到1
两次,这显然是因为从集合[1]开始的流没有完成,但当我使用flatMapLatest
时,我正在等待1, 1, 2, 2, 3, 3
.我的样品有什么问题?
UPD:
我只是增加了延迟以得到println
的结果.
因此,这实际上是一场代码竞赛
launch {
delay(3000)
sourceFlow.emit(1)
set[1]!!.emit("1")
set[1]!!.emit("1")
}