플로우 런칭
예제 78: 이벤트를 Flow로 처리하기
addEventListener
대신 플로우의 onEach
를 사용할 수 있습니다. 이벤트마다 onEach
가 대응하는 것입니다.
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun events(): Flow<Int> = (1..3).asFlow().onEach { delay(100) }
fun main() = runBlocking<Unit> {
events()
.onEach { event -> println("Event: $event") }
.collect()
println("Done")
}
하지만 collect
가 플로가 끝날 때 까지 기다리는 것이 문제입니다.
예제 79: launchIn을 사용하여 런칭하기
launchIn
을 이용하면 별도의 코루틴에서 플로우를 런칭할 수 있습니다.
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun events(): Flow<Int> = (1..3).asFlow().onEach { delay(100) }
fun main() = runBlocking<Unit> {
events()
.onEach { event -> println("Event: $event") }
.launchIn(this)
println("Done")
}