我是使用流和协程的新手,希望您能帮我解决以下问题:
我有 useCases.getScheduleList()
和 useCases.getScheduleDetails()
返回 Flow 的方法。我需要调用useCases.getScheduleList()
获取日程表,然后调用useCases.getScheduleDetails()
对于计划列表中的每个项目。以下是我的尝试:
viewModelScope.launch {
useCases.getScheduleList().collect {
val scheduleList = it
val schedulesWithDetails = arrayListOf<ScheduleWithDetails>()
for (schedule in scheduleList) {
launch {
useCases.getScheduleDetails(schedule.code)
.collect { detail ->
schedulesWithDetails.add(
newScheduleWithDetail(
schedule,
detail.body
)
)
}
}
}
// updateUI is called before collect add items to schedulesWithDetails
updateUI(schedulesWithDetails)
}
}
}
在上面的代码中,我可以收集 list ,还可以收集 list 中每个项目的详细信息,并将结果添加到我的 schedulesWithDetails
但我不能使用 schedulesWithDetails
已添加数据,因为 updateUI()
方法不等待收集过程完成然后执行。谁能帮我解决这个问题的想法/建议?
最佳答案
试试这个:
viewModelScope.launch {
useCases.getScheduleList().map { scheduleList ->
scheduleList.map { async { useCases.getScheduleDetails(it).first() } }.awaitAll()
}.collect { schedulesWithDetails ->
updateUi(schedulesWithDetails)
}
}
关于android - 如何使用流和协程在循环内收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67535464/