Kotlin Flow - 是否可以按需添加新值

标签 kotlin channel flow

是否可以在创建流后向流添加值?

到目前为止,我已经看到了流构建器示例,其中构建器定义了将发出哪些值以及何时发出。但是,如果我需要在生成任何值之前创建一个流并在 UI 层上订阅它,该怎么办。然后我需要在不同的层(例如域)中为其添加值。所以我想我会创建一个空的流程构建器,然后添加值,但它不起作用。此模型适用于 Channels,但我不想使用已弃用的 API,请参见下文。我想要一种连接域和 UI 层并且可以观察到的机制。 Channels 的另一个问题是我无法清除其中的数据,最后一个值似乎总是留在那里。

private val channel = ConflatedBroadcastChannel<Data>()

override val flow: Flow<Data> = flow {
    channel.consumeEach { data ->
        this.emit(data)
    }
}
override suspend fun setGraph(domainData: Data) {
    channel.send(domainData)
}

最佳答案

您在使用 Channel 并将其公开为 Flow 的想法上走在正确的轨道上,唯一缺少的部分是 Channel.asFlow()扩展功能,见docs .

但是,我认为您的问题与 this question 重复,已经是 answered . (我会将此作为评论发布,但我没有足够的声誉。)

关于Kotlin Flow - 是否可以按需添加新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047648/

相关文章:

algorithm - 读取和写入同一 channel 的工作池去

kotlin - 链 kotlin 流取决于结果状态

html - 如何通过该特定XML对邮件进行xPath?

responsive-design - CSS区域:WAITING浏览器支持时的JS替代方法

java - 在 Kotlin 中返回 Fragment 实例 @JvmStatic

Kotlin 如何声明具有相同数据类型的链接字段

kotlin - 如何将依赖 ThreadLocal 的代码与 Kotlin 协程一起使用

使用 Stream 的 Kotlin 智能 Actor

kotlin - Kotlin channel 满时执行一段代码

for-loop - 如何在Go中并行运行for循环内的方法?