我需要并行进行多个调用,并且仅在协程一切成功后才发送结果
我想一次调用多个页面。因为该API有4页,所以我想一次带出所有结果。
我设法这样手动进行:
private fun fetchList() {
viewModelScope.launch {
val item1 = async { repository.getList(1)!! }
val item2 = async { repository.getList(2)!! }
val item3 = async { repository.getList(3)!! }
val item4 = async { repository.getList(4)!! }
launch {
mutableLiveDataList.success(item1.await() + item2.await() + item3.await() + item4.await())
}
}
}
但是,当我尝试循环播放时,它只会显示其中一页。
api:
@GET("cards")
suspend fun getListCards(@Query("set") set: String, @Query("page") page: Int): CardsResponse
最佳答案
我按照@curioustechizen所说的做,并且奏效了。
这是一个外观的示例:
private fun fetchList() {
viewModelScope.launch {
val listPageNumbers = arrayListOf<Int>()
(1..4).forEach { listPageNumbers.add(it) }
listPageNumbers.map {
delay(1000)
async {
mutableLiveDataList.success(repository.getListCards(it)!!)
}
}.awaitAll()
}
}