如何使用collect和Kotlin实现collectLatest行为?

wdebmtf2  于 2023-04-21  发布在  Kotlin
关注(0)|答案(1)|浏览(223)

我使用collectLatest从流中收集值,但每当它处理最新值并取消旧处理值时,我总是得到低于exeception的值。

ChildCanceledException:  Child of the scoped flow was cancelled

问题:
1.我们可以使用collectLatest来避免这个异常吗?
1.我们可以使用collect来实现collect latest功能以避免此异常吗?

2ul0zpep

2ul0zpep1#

我认为对于你的数据变量的更新,你应该是流动的,你可以像这样收集你的数据:

变量声明

private val _uiEvents = Channel<UIEvents>()
val uiEvents = _uiEvents.receiveAsFlow()

向变量发送事件或数据

viewModelScope.lauch{
   _uiEvents.send(UIEvent())
}

正在收集数据

viewModelScope.lauch{
  uiEvents.collect{ it: UIEvent ->
     /* Here will be your code to update you data and $it will be your updated value */
  }
}

这里uiEvents收集来自_uiEvents的所有新数据作为流,当你使用流时,你可以很容易地收集你的数据。
这个流将持续很长时间,因为你的应用程序,所以没有选择内存泄漏。
如果你觉得这比让我知道,如果有任何错误的解释,然后纠正我有帮助,我很高兴知道你的侧面答案。谢谢。

相关问题