我有一个将数据作为流返回的 API:
suspend fun loadData(...): Flow<List<Items>>
suspend fun loadDetails(...): Flow<ItemDetails>
当我获取数据时,我需要加载一些项目的详细信息并将结果转换为实时数据:
job = SupervisorJob()
val context = CoroutineScope(job + Dispatchers.Main.immediate).coroutineContext
liveData(context = context) {
emitSource(
api.loadData(...)
.flatMapConcat { items ->
items.forEach { item ->
if (item is Details){
api.loadDetails(item).flatMapConcat{ details ->
item.details = details
}
}
}
flow {
emit(items)
}
}
)
这里的问题在完成emit(items)
之前调用loadDetails
,所以item.details = details
更新调用。
如何等待forEach
更新所有项目?