Publishers.Retry

μ œλ„€λ¦­ ꡬ쑰체 | μ‹€νŒ¨ν•œ μƒμœ„ Publisher에 λŒ€ν•˜μ—¬ ꡬ독을 λ‹€μ‹œ μƒμ„±ν•˜λŠ” 것을 μ‹œλ„ν•˜λŠ” Publisher

μ΄λ‹ˆμ…œλΌμ΄μ €λŠ” 두 개의 인자λ₯Ό λ°›λŠ”λ‹€.

  • upstream : μƒμœ„μ— 흐λ₯΄λŠ” Publisher

  • retries : μ΅œλŒ€ μž¬μ‹œλ„ 횟수. nil이 λ“€μ–΄κ°€λ©΄ μƒμœ„ Publisherκ°€ μ—λŸ¬λ₯Ό 내지 μ•Šμ„ λ•ŒκΉŒμ§€ μž¬μ‹œλ„ν•œλ‹€.

예λ₯Ό λ“€μ–΄ νŠΉμ • λ„€νŠΈμ›Œν¬ μš”μ²­μ΄ 성곡할 λ•ŒκΉŒμ§€ λ‹€μ‹œ μš”μ²­ν•˜λ € ν•œλ‹€λ©΄ 이 λ™μž‘μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

retry μ˜€νΌλ ˆμ΄ν„°μ™€ 관련이 μžˆλ‹€.

// Publishers.Retry Publisher
Publishers.Retry(upstream: Fail<Void, Error>(error: error), retries: 2)
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Retry Error")
    case .finished:
      print("Combine Retry Finish")
    }
  }, receiveValue: { value in
    print("Combine Retry : \(value)")
  })
  .store(in: &cancellables)

// retry Operator
Fail<Void, Error>(error: error)
  .retry(2)
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Retry Error")
    case .finished:
      print("Combine Retry Finish")
    }
  }, receiveValue: { value in
    print("Combine Retry : \(value)")
  })
  .store(in: &cancellables)

// Combine Retry Error

μœ„μ˜ μ½”λ“œλŠ” μƒμœ„ Publisher둜 Fail Publisherλ₯Ό λͺ…μ‹œν•˜μ˜€λ‹€.

κ·ΈλŸ¬λ―€λ‘œ 첫 κ΅¬λ…μ—μ„œ μ—λŸ¬κ°€ λ‚΄λ €μ˜€κ²Œ 되고, 이후 두 번 μž¬μ‹œλ„ν•œλ‹€.

두 번의 μž¬μ‹œλ„μ—λ„ λΆˆκ΅¬ν•˜κ³  μ—λŸ¬κ°€ λ‚΄λ €μ˜€λ―€λ‘œ 결과적으둜 μ—λŸ¬λ₯Ό λ‚Έλ‹€.

RxSwift

retry μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

Observable<Void>.error(error)
  .retry(2)
  .subscribe(onNext: { value in
    print("RxSwift Retry : \(value)")
  }, onError: { _ in
    print("RxSwift Retry Error")
  }, onCompleted: {
    print("RxSwift Retry Finish")
  })
  .disposed(by: disposeBag)

// RxSwift Retry Error

ReactiveSwift

retry μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

SignalProducer<Void, Error>(error: error)
  .retry(upTo: 2)
  .start { event in
    switch event {
    case let .value(value):
      print("ReactiveSwift Retry : \(value)")
    case .failed:
      print("ReactiveSwift Retry Error")
    case .completed:
      print("ReactiveSwift Retry Finish")
    default:
      break
    }
  }

// ReactiveSwift Retry Error

μ°Έκ³ 

ReactiveX - Operators - Retry

Last updated