【发布时间】:2021-08-20 07:14:49
【问题描述】:
我的 viewModel 中有 2 个 stateFlow。要在片段中收集它们,我必须启动协程 2 次,如下所示:
lifecycleScope.launchWhenStarted {
stocksVM.quotes.collect {
if (it is Resource.Success) {
it.data?.let { list ->
quoteAdapter.submitData(list)
}
}
}
}
lifecycleScope.launchWhenStarted {
stocksVM.stockUpdate.collect {
log(it.data?.data.toString())
}
}
如果我有更多的 stateFlow,我必须分别启动协程。有没有更好的方法来处理我的 Fragment/Activity 或任何地方的多个 stateFlow?
【问题讨论】:
-
是什么阻止您在一个范围内进行收集?就像你启动
lifecycleScope.launchWhenStarted {}一样,你不能只在里面stocksVM.quotes.collect{}和stocksVM.stockUpdate.collect {}。 -
不幸的是,我不能。因为 collect() 是协程内的挂起函数,它会挂起直到我的流程停止,因此我的下一个 collect() 不会被调用,直到前一个流程终止 @che10
标签: android kotlin kotlin-coroutines stateflow