2017-04-25 6 views
0

ReactiveSwift : n 배까지 다시 시도, 다음 (이 모든 시도를 실패 할 경우) 일부 콜백을 실행 한 후 n 번을 다시 시도 할 수있는 기본 방법이 있나요

func test() -> SignalProducer<String, Error> { 
    return SignalProducer<String, Error> { observer, _ in 
     ... 
    } 
} 

test() 
    .on(value: { s in 
     print(s) 
    }) 
    .retry(upTo: 2) 
    .start() 
} 

아래의 코드를 고려 몇 가지 코드를 실행 ?

물론 로컬 카운터를 도입하고 .on(failed: _)의 실패 수를 계산 한 다음 카운터가 n + 1과 같을 경우 무언가를 수행 할 수는 있지만 다른 방법이 있습니까?

답변

2

retry(upTo:)은 재시도 한계에 도달하면 오류를 따라 전달되므로 값과 오류를 처리 할 수있는 start 메서드 중 하나를 사용할 수 있습니다. 예를 들어, 당신이 할 수있는 startWithResult를 사용하여 (이 코드를 테스트하지 않았습니다주의를하지만, 당신이 아이디어를 줄 것이다) :

test() 
    .retry(upTo: 2) 
    .startWithResult { result in 
     switch result { 
     case let .success(value): 
      print(value) 
     case let .failed(error): 
      // handle error here 
     } 
    } 
+0

이 여기서 중요한 것은 순서입니다는'전에 .retry' 부가' .on 처리기는 마지막 오류 만 전달합니다 (이 경우 원하는 효과). 나는 어떻게 든 그것을 놓쳤다. – Buddy

+1

그래, 각 연산자는 실제로 로직이나 트랜스 포메이션으로 이전 신호를 감싸는 새로운 신호/생성자를 생성합니다. 그래서 원래의 코드에서'재 시도'는'on' 부작용을 포함하여 그 앞에 오는 모든 코드에 정의 된대로 프로듀서를 다시 시도 할 것입니다. – jjoelson