重试延迟 - RxSwift

Nik*_*nko 2 ios swift rx-swift

有没有优雅的解决方案来造成延迟retry?当错误发生时我想等待 5 秒并重新启动 Observable ( retry)

Hlu*_*ung 5

只需创建一个包装retry(). (Swift5.1 RxSwift 4.3.1)

extension PrimitiveSequence{
  func retry(maxAttempts: Int, delay: TimeInterval) -> PrimitiveSequence<Trait, Element> {
    return self.retryWhen { errors in
      return errors.enumerated().flatMap{ (index, error) -> Observable<Int64> in
        if index < maxAttempts {
          return Observable<Int64>.timer(RxTimeInterval(delay), scheduler: MainScheduler.instance)
        } else {
          return Observable.error(error)
        }
      }
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

使用示例:(重试 3 次,每次延迟 2 秒)

yourRxStream.retry(maxAttempts: 3, delay: 2)
Run Code Online (Sandbox Code Playgroud)