[Android A..Z] Flow onXXX연산자 예외처리 정리
2024. 4. 21. 17:02ㆍ개발/[Kotlin] 안드로이드 개발
반응형
onEach : 각 아이템 마다 무언가 할 때
fetchBoardDetailItemUseCase(id)
.onStart {
_boardDetailUiState.update {
it.copy(
isLoading = true,
items = listOf()
)
}
}.onEach {
Log.d(TAG, "Item ${it.toString()}")
}
Flow에서 아이템을 방출할 때 마다 실행하도록 할 수 있다.
업스트림에서 흘러나오는 값을 그대로 내보낸다.
onStart : 시작할 때
fetchBoardDetailItemUseCase(id)
.onStart {
_boardDetailUiState.update {
it.copy(
isLoading = true,
items = listOf()
)
}
}
onStart 함수는 Flow가 실행을 시작할 때 특정 데이터를 방출할 수 있도록 지원한다.
선언 위치는 사용전이면 상관 없으며 여러 번 사용하면 순서대로 전부 실행된다.
onEmpty : 비어있을 때
fetchBoardDetailItemUseCase(id)
.onEmpty {
_boardDetailUiState.update {
it.copy(
isLoading = false,
items = listOf(),
errorMessage = "boardDetailUiState is Empty!!"
)
}
}
onEmpty 함수는 Flow가 비어있을 때 특정 데이터를 방출할 수 있도록 지원한다.
선언 위치는 상관이 없으나 여러 번 사용하면 처음에 사용한 함수만 적용이 된다.
catch : 에러 발생했을 때
fetchBoardDetailItemUseCase(id)
.onStart {
_boardDetailUiState.update {
it.copy(
isLoading = true,
items = listOf()
)
}
}.catch {
_boardDetailUiState.update {
it.copy(errorMessage = "boardDetail is Error!!")
}
}
catch 함수는 try / catch와 동일한 역할로 예외 발생 시 해당 예외처리를 위하여 사용할 수 있다.
인자로는 throwable이 들어오며 예외처리 후 Flow는 알아서 종료된다.
catch 함수는 upStream 만 집어낼 수 있기에 사용 위치가 매우 중요하다.
onCompletion: 완료되었을 때
fetchBoardDetailItemUseCase(id)
.onStart {
_boardDetailUiState.update {
it.copy(
isLoading = true,
items = listOf()
)
}
}.onCompletion {
Log.d(TAG, "complete")
}
onCompletion 함수는 try/finally와 동일한 역할로 Flow가 완료되었을 때의 동작을 지정할 수 있다.
정상적인 완료와 에러로 인한 와료 두 가지 케이스 모두 해당 함수를 실행시킨다.
인자로는 Throwable이 들어오며, null 이면 정상종료 또는 catch를 통해 이미 예외 처리된 경우이고 null이 아니면 에러로 인한 종료이다.
반응형
'개발 > [Kotlin] 안드로이드 개발' 카테고리의 다른 글
Compose 2024 (0) | 2024.06.11 |
---|---|
[Android A..Z] Flow 중간연산자 정리 (0) | 2024.04.21 |
[Android A..Z] Flow collect vs collectLatest (0) | 2024.03.30 |
[Android A..Z] Flow StateFlow vs SharedFlow 비교 (0) | 2024.03.30 |
[A..Z] Kotlin Flow vs StateFlow hot? cold? 스트림 쉽게 알아보기 (2) | 2023.11.29 |