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)
}
}