Kotlin流作为事件循环



我有一个KotlinFlow<String>与事件名称,由另一个线程产生,但最终通过网络传入。

我想用它来控制事件循环,但是-作为Kotlin的新手-感觉我滥用了它:

val commands: SharedFlow<String> = ...
commands.takeWhile { 
when (command) {
"foo" -> executeFoo()
"bar" -> executeBar()
// ...
}
command != "cancel"
}.collect {}

我看到takeWhile是建立在collectWhile上的,这是我真正想使用的,但它是internal。有没有更好的方法来摆脱collect {},或者我完全偏离了轨道?

通常,将条件和操作分开会更简洁:

commands
.takeWhile { it != "cancel" }
.collect {
when (it) {
"foo" -> executeFoo()
"bar" -> executeBar()
// ...
}
}

这可能就是为什么collectWhile是内部的。在常规代码中应该避免使用。

相关内容

  • 没有找到相关文章

最新更新