Raf*_*lva 4 android kotlin kotlin-coroutines
我是使用流程和协程的新手,我希望您能帮助我解决以下问题:
我有返回 Flow 的useCases.getScheduleList()和方法。useCases.getScheduleDetails()我需要调用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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我可以收集列表,还可以收集列表中每个项目的详细信息,并将结果添加到我的列表中,schedulesWithDetails但我无法使用schedulesWithDetails已添加的数据,因为该updateUI()方法不会等待收集过程完成然后被执行。
任何人都可以帮我解决这个问题的想法/建议吗?
试试这个:
viewModelScope.launch {
useCases.getScheduleList().map { scheduleList ->
scheduleList.map { async { useCases.getScheduleDetails(it).first() } }.awaitAll()
}.collect { schedulesWithDetails ->
updateUi(schedulesWithDetails)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2009 次 |
| 最近记录: |