Мои цели:
- попробовать отправить данные (без приостановки )
- подписаться на производителя
- получить новые данные, а не исторические, только один раз
< li>прекратить подписку
Код: Выделить всё
class Producer {
private val _event = MutableSharedFlow(
extraBufferCapacity = 1,
onBufferOverflow = BufferOverflow.DROP_OLDEST
)
val event: Flow = _event.asSharedFlow()
fun produce(event: String) {
_event.tryEmit(event)
}
}
class Consumer {
val producer = Producer()
var job: Job? = null
fun consume(viewModelScope: CoroutineScope) {
job = producer
.event
.onEach {
job?.cancel()
// process
}
.launchIn(viewModelScope)
}
}
- если я хочу получить только один раз данные, поэтому это должна быть другая функция вместо onEach
- вместо хранения ссылки на Job и вызова launchIn. Я пытался вызвать .shareIn (viewModelScope, WhileSubscribed())
Код: Выделить всё
.onEach {
// job?.cancel()
Подробнее здесь: [url]https://stackoverflow.com/questions/78658783/coroutines-receive-new-data-only-ones-and-then-stop-subscribing-a-flow[/url]
Мобильная версия