gpt4 book ai didi

android - 如何使用流和协程在循环内收集数据

转载 作者:行者123 更新时间:2023-12-04 03:26:15 26 4
gpt4 key购买 nike

我是使用流和协程的新手,希望您能帮我解决以下问题:
我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com