Kotlin ConflatedBroadcastChannel.offer () не работает? - PullRequest
0 голосов
/ 09 мая 2020

Я отправляю значение через MyRepository.myConflatedChannel.offer(myvalue).

Затем я ожидаю получить его в блоках collect { } или onEach { } в моей ViewModel. Однако ни одна из функций не вызывается. Это как если бы ничего не передавалось по ConflatedBroadcastChannel.

Кто-нибудь видел подобную проблему?

1 Ответ

1 голос
/ 09 мая 2020

Убедитесь, что вы правильно работаете с получением значений.

Если вы используете ConflatedBroadcastChannel, вы можете использовать OpenSubscription , чтобы получить ReceiveChannel , или вы можете его представить как поток (с asFlow ).

Обратите внимание, что consume и consumeEach являются терминальными, они выполняют действие, а затем отменяют канал после выполнения блока. См. это .

Первый случай:

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
    }
}
...