Tunko Development Diary

RxSwift) Error Handling (catch, catchAndReturn) 본문

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
반응형
Comments