Skip to content

Instantly share code, notes, and snippets.

@r-plus
Created October 21, 2019 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r-plus/07366d243594c098278be17d3f5f96e2 to your computer and use it in GitHub Desktop.
Save r-plus/07366d243594c098278be17d3f5f96e2 to your computer and use it in GitHub Desktop.
extension Observable {
/// maxAttemptまでdelay間隔をあけてリトライする
///
/// - Parameters:
/// - maxAttempt: 最大リトライ回数
/// - delay: 間隔
/// - Returns: リトライしたObservable
func retry(_ maxAttempt: Int, delay: RxTimeInterval) -> Observable<Element> {
return retryWhen { (err: Observable<Error>) -> Observable<Int> in
return err.enumerated().flatMap { (count, err) -> Observable<Int> in
guard count < maxAttempt - 1 else {
return Observable<Int>.error(err)
}
let serialQ = SerialDispatchQueueScheduler(qos: .background)
return Observable<Int>.timer(delay, scheduler: serialQ)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment