Development/RxSwift
RxSwift) Error Handling (catch, catchAndReturn)
Tunko
2022. 6. 10. 03:33
catch, catchAndReturn
두 연산자 catch와 catchAndReturn 은 옵버버블에서 에러가 발생했을때에 대한 처리입니다.
catch는 Error가 발생하면 새로운 옵저버블을 리턴해줍니다.
catchAndReturn은 Error가 발생하면 특정 값을 Next이벤트로 전달합니다.
let disposeBag = DisposeBag()
enum TunkoError: Error {
case error
}
let subject = PublishSubject<Int>()
let errorSubject = PublishSubject<Int>()
subject
.catch { _ in errorSubject }
.subscribe { print($0) }
.disposed(by: disposeBag)
subject.onNext(1)
subject.onError(TunkoError.error)
subject.onNext(2)
errorSubject.onNext(11)
errorSubject.onNext(22)
errorSubject.onCompleted()
출력
next(1)
next(11)
next(22)
completed
subject 에서 1 next 이벤트까지만 방출된후 Error가 발생했고 그 이후 이벤트는 무시되었습니다. 하지만 catch 에러 return 한 errorSubject 에서 이어서 next 이벤트가 방출된것을 확인할 수 있습니다.
그럼 catchAndReturn 로 변경해보겠습니다.
subject
.catchAndReturn(999)
.subscribe { print($0) }
.disposed(by: disposeBag)
subject.onNext(1)
subject.onError(TunkoError.error)
subject.onNext(2)
errorSubject.onNext(11)
errorSubject.onNext(22)
errorSubject.onCompleted()
출력
next(1)
next(999)
completed
반응형