관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] RxSwift 서버 에러처리 (retry, retryWhen) 본문

RxSwift

[iOS - swift] RxSwift 서버 에러처리 (retry, retryWhen)

jake-kim 2021. 2. 9. 22:56

retry() 연산자를 사용하여 에러처리

  • retry() 가장 간단한 방법, 에러가 발생할 경우 시퀀스를 재생성하여 Error가 나지않도록 처리
func retry() -> Observable<Self.E>
  • retry(_ maxAttemptCount:) 횟수를 제한할 수 있는 에러처리 
func retry(_ maxAttemptCount:) -> Observable<E>
  • retryWhen(_ notificationHandler:) notificationHandler의 타임은 TriggerObservable (= Observable이거나 Subject 형)
func retryWhen(_ notificationHandler:) -> Observable<E>

사용방법

  • 만약 RxSwift를 쓰지 않는다면, NSOperation이나 GCD를 이용하여 몇초뒤에 에러가 발생한 이후 몇초 이후에 재시도
  • retryWhen을 이용하여 에러처리 방법
  • 형태: subscribe하기 전에 retryWhen을 호출
observable.retryWhen(retryHandler).subscribe(...)
  • 재시도 횟수 정의
// 몇번 반복할 것인지 횟수 정의
let maxTryCount = 4
  • retryWhen()사용
.retryWhen { error in
    error.enumerated().flatMap { (tryCount, error) -> Observable<Int> in
        if tryCount < maRetryCount - 1  {
            return Observable.error(error)
        }
        return Observable<Int>.timer(1, scheduler: MainScheduler.instance).take(1)
    }
}

 

Comments