Несколько звонков l oop с сопрограммами - PullRequest
1 голос
/ 14 марта 2020

Мне нужно сделать несколько вызовов параллельно и отправить результат только тогда, когда все успешно с сопрограммами

Я хочу вызвать несколько страниц одновременно. Поскольку в 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())
        }
    }
}

Но когда я пытаюсь l oop это просто вызывает одну из страниц.

Api:

@GET("cards")
suspend fun getListCards(@Query("set") set: String, @Query("page") page: Int): CardsResponse

1 Ответ

0 голосов
/ 15 марта 2020

Я сделал, как сказал @ 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()
    }
}
...