Kotlin/안드로이드 공부
Rxjava 에러 캐치
yerintil
2021. 10. 7. 09:33
728x90
Rxjava 에서는 에러 발생시 onError 이벤트가 발생하기 때문에 기존 사용하던 try-catch 문을 사용할 수 없다.
하지만 onError 이벤트는 흐름이 중단된다는 문제점이 있다. 이때 소비자가 모든 예외를 미리 알고 처리하기는 힘드므로 생산자 쪽에서 에러를 캐치해서 사전에 예외처리를 해둘 수 있는 3가지 Operator 를 정리해보려고 한다.
*Rxjava 에서는 에러도 어떠한 데이터로 본다.
onErrorReturn()

에러 발생 시점에 특정 값으로 대체
+ 선언적으로 예외 발생 처리 가능
.onErrorReturn { it:Throwable
when (it) {
is java.lang.NullPointerException -> {
it.printStackTrace()
}
}
}
onErrorReturnItem()

에러 발생 시점에 특정 값으로 대체
onErrorReturn() 과 동일하지만 throwable 객체를 인자로 받아오지 않음
+ 코드의 가독성
- 예외의 종류를 확인할 수 없음
onErrorResumeNext()

에러 발생 시점에 대체할 스트림 (Observable 등) 으로 대체 -> 대체할 데이터가 고정되어 있지 않을 때 사용
이 operator 와 비교해서 onErrorReturn() 과 onErrorReturnItem() 은 기본 값 반환 후 더이상 emit 하지 않는다는 것을 알 수 있다.
+ 에러 처리 외에도 필요한 추가 작업 가능
+ onErrorReturn() 처럼 throwable 받아오기 가능
