如何解决stateIn 运算符不更新 StateFlow 的缓存值
我有一些共享流,它们被合并到不同类中的几个流中,然后这些流被合并成一个流。原始共享流配置如下:
protected val statusMutable = MutableSharedFlow<Int>()
val status: Flow<Int> = statusMutable.asSharedFlow()
所以,默认配置。最后我有这样的代码:
val status
get() = merge(
object1.status,// merged shared flows
object2.status,// merged shared flows
object3.status,// merged shared flows
statusMutable
).stateIn(GlobalScope,SharingStarted.Lazily,initialValue = someInt)
这个流应该是无限热流,所以我使用了 GlobalScope
(如果有更好的方法,你也可以告诉我如何更好地解决这个问题,但这不是实际问题)。
实际的问题是值被很好地发出和收集,但结果 StateFlow
由于某种原因没有更新其值属性(因此是重放缓存)。这会导致新订阅者无法获得订阅时最新发出的值的情况。造成这种情况的原因是什么,我该如何解决?
解决方法
事实证明,问题是我通过一个 getter 访问这个流,尽管我只需要将它分配给属性。这么愚蠢的错误!有趣的是,我放弃了自己寻找答案并发布了这个问题,只是在大约 15 分钟后发现了一个错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。