Kotlin ConflatedBroadcastChannel.offer() 不起作用?
Kotlin ConflatedBroadcastChannel.offer() doesn't work?
我正在通过 MyRepository.myConflatedChannel.offer(myvalue)
发送一个值。
然后我希望在我的 ViewModel 中的 collect { }
或 onEach { }
块中收到它。但是,这两个函数都没有被调用。好像什么都没有传递到 ConflatedBroadcastChannel。
有没有人遇到过类似的问题?
确保正确处理接收值。
如果您使用 ConflatedBroadcastChannel,则可以使用 OpenSubscription to get a ReceiveChannel or you can represent it as flow (with asFlow).
注意consume
和consumeEach
是终端,它们执行一个动作,然后在块执行后取消通道。参见 this。
第一种情况:
val receivingChannel = MyRepository.myConflatedChannel.openSubscription()
// then you can consume values using for example a for loop, e.g.:
launch {
for (value in receivingChannel) {
// do something
}
}
第二种情况:
val receivingFlow = MyRepository.myConflatedChannel.asFlow()
launch {
receivingFlow.collect {
// do something
}
}
我正在通过 MyRepository.myConflatedChannel.offer(myvalue)
发送一个值。
然后我希望在我的 ViewModel 中的 collect { }
或 onEach { }
块中收到它。但是,这两个函数都没有被调用。好像什么都没有传递到 ConflatedBroadcastChannel。
有没有人遇到过类似的问题?
确保正确处理接收值。
如果您使用 ConflatedBroadcastChannel,则可以使用 OpenSubscription to get a ReceiveChannel or you can represent it as flow (with asFlow).
注意consume
和consumeEach
是终端,它们执行一个动作,然后在块执行后取消通道。参见 this。
第一种情况:
val receivingChannel = MyRepository.myConflatedChannel.openSubscription()
// then you can consume values using for example a for loop, e.g.:
launch {
for (value in receivingChannel) {
// do something
}
}
第二种情况:
val receivingFlow = MyRepository.myConflatedChannel.asFlow()
launch {
receivingFlow.collect {
// do something
}
}