如何解决kotlin 协程,定期发出数据并检查订阅者数量
我在 Spring Boot 上有一个带有 rSocket 服务的服务器:
@MessageMapping("get-messages")
fun getMessageById(): Flow<Set<Message>> {
return flow { emit(service.getLatestMessages()) }
}
因为 repo 不是响应式的,我想定期去数据库中获取数据并将其提供给订阅者(如果存在)。
我想像这样使用 StateFlow:
private val stateFlowMessages = MutableStateFlow<Set<Message>>(emptySet())
init {
Coroutinescope(dispatchers.IO).launch {
while(true){
if (stateFlowProducts.subscriptionCount.value > 0)
stateFlowProducts.value = service.getLatestMessages()
delay(6 * 1000)
}
}
}
但订阅者总是 0,我认为“while”和“delay”不是最佳做法?
解决方法
0. subscriptionCount: `0 1 2 0 2`
1. Map to true/false: `false true true false true`
2. Distinct. : `false true false true`
3. Filter. : ` true true`
3. MapLatest. : ` list list`.
stateFlowProducts.subscriptionCount
.map { it > 0 }
.distinctUntilChanged()
.filter { it }
.mapLatest { service.getLatestMessages() }
.onEach { stateFlowProducts.value = it }
.launchIn(scope)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。