fun main() = runBlocking { composedRequest() .collect { println("Updating list..........") println(it) } } suspend fun composedRequest(): Flow> = coroutineScope { flow { var allStrings = listOf() val list = firstRequest() .map { number -> async { secondRequest(number) } } for (item in list) { val result = item.await() allStrings = (allStrings + result) emit(allStrings) } } } suspend fun firstRequest(): List { println("Doing first request") delay(300) println("retrieving first request") return listOf(1, 2, 3) } suspend fun secondRequest(number: Int): List { println("Doing second request for number $number") delay(200) println("retrieving second request for number $number") return ('a'..'e').map { "$number$it" } }