kotlin 使用onEach处理程序创建可变共享流

h6my8fg2  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(227)

我有一个“流源”,我想给予一个“消费者”一个SharedFlow,我想让一些消费者能够响应流中的数据,其他消费者也会向流发出数据,每当数据向流发出时,我想用onEach记录它。

class FlowSource {
  public dataFlow: MutableSharedFlow<Data> = MutableSharedFlow(0, 5).forEarch {Log(it}}
}

上面的返回一个错误,因为.onEach返回一个新的Flow。如果我尝试使用.shareIn(xxxx),它会创建一个SharedFlow,而不是一个Mutable共享流。我如何返回一个已经添加了.onEach逻辑的MutableSharedFlow,以便我不必在消费者上添加.onEach?

ojsjcaue

ojsjcaue1#

是的,没有办法直接创建一个内置了副作用的MutableSharedFlow。你基本上必须给予它一个收集器来执行额外的操作。类似这样:

val dataFlow: MutableSharedFlow<Data> = MutableSharedFlow(0, 5).apply { 
    onEach { Log(it} }.launchIn(someCoroutineScope)
}

上面的someCoroutineScope需要是一个适当的作用域,当这个dataFlow超出作用域时,它会被取消,这样我们就不会泄漏它。

相关问题