2016-09-18 8 views
1

RxSwift 스트림을 처리 할 때 ViewController 레이어에서 API 호출을 다시 시도 할 수있는 방법을 파악하려고합니다. 내 오류를 Element으로 감싸거나 스트림 Error을 반환 할 수 있음을 이해합니다. 두 경우 모두 사용자의 재량에 따라 작업을 "다시 시도"할 수있는 방법이 명확하지 않습니다 (예 : 경고 발생 후).RxSwift를 사용할 때 ViewController의 API 오류를 표시하고 복구하는 방법

오류가있는 경우 다시 시도하기 위해 API 레이어로 "아래로"통신 할 수 있습니까? 오류를 감싸지 않으면 두 가지 질문이 있습니다. 1) 경고에 대한 사용자의 응답에 따라 retry을 조건부로 만들 수 있습니까? 및 2) 스트림을 "다시 초기화"할 수 있습니까?

유일한 문제는 "재시도 제목"을 오류와 함께 전달하고보기 컨트롤러가 관련 관찰 가능 항목에 무엇인가를 방출하여 재시도 요청을 표시하도록하는 것입니다 (즉, 주제) API 스트림과 관련이 있습니다. 그러나 그것은 너무 복잡하게 보입니다.

더 일반적으로 스트림/관찰 가능 항목의 응용 프로그램 오류 처리 주제에 대한 유용한 자료를 참조하십시오. RxSwift 객체와 연산자를 잘 이해하고 "행복한 경로"상황을 처리하는 방법을 알고 있지만 연속적으로 실행되는 응용 프로그램의 컨텍스트에서 오류를 강력하게 처리하는 방법은 분명하지 않습니다. 이것에 대한

답변

0

내 솔루션을 다시 구독 할 수 있도록 필요, 이러한 유형의 예를 들어 Result<AnyObject,ErrorType>

, 사용자 로그인 시나리오

// where API.login() takes the response data and try to map to JSON 
// then try to map into Result<JSON,ErrorType> 
let loginStream: Result<JSON,ErrorType> = loginTaps.flatMap { API.login() } 
                .shareReplay() 

let loginResponse = loginStream.filter { $0.value != nil }.map { $0.value } 
let loginError = loginStream.filter { $0.error != nil }.map { $0.error } 

스트림이 종료되지 않습니다로 포장하지 않습니다.