2017-01-26 10 views
0

"제 3 자"게시자를 RxJava로 랩핑하려고합니다. 구독하는 동안 게시자를 준비 중이며 예외가 발생할 수 있습니다 (게시자를 사용할 수없는 경우).가입 기간 중에 예외가 발생하면 어떻게해야합니까?

예외가 발생하면 어떻게해야합니까?

1) subscribe 메소드에서 던집니까?

2) 옵서버의 OnError 방법으로 밀어 넣으시겠습니까?

3) 다른 것?

OnError으로 푸시하는 방법에 대해 생각해 봤습니다. 구독을 구현하는 방법은 무엇입니까? OnError이 구독의 마지막 이벤트 여야하는 경우 구독이 발생하는지 여부를 고려해야합니까? Subscription으로 반환 할 대상은 무엇입니까? 그냥 NOP 람다?

답변

0

OnError로 푸시하는 방법에 대해 생각하고 있는데 구독을 구현하는 방법은 무엇입니까? OnError가 구독의 마지막 이벤트 여야한다면 구독으로 간주해야합니까? 서브 스크립 션으로 반환 할 대상은 무엇입니까? 그냥 NOP 람다?

이것은 실제로 RxJava 자체가 각 연산자의 '생성자'에서 예외를 처리하는 방식입니다.

RxJava2로 작업하는 경우 염두에 두어야 할 추가 규칙이 하나 있습니다. 그리고 onErroronComplete 전에 항상 Subscriber.onSubcribe()을 호출해야하므로 예외가 즉시 throw 되더라도 onSubscribeonError을 호출해야합니다.

1

"게시자"와 "랩"이 무슨 뜻인지 약간 분명하지 않습니다.

예를 들어 Observable을 반환하는 API 호출이 있지만 호출 자체가 검사되지 않은 예외를 throw 할 수 있습니다.

Observable.defer(() -> api.unreliableMethod())... 

당신이 의미하는 경우, 반응성 - 스트림이 Publisher 및 RxJava 2, 당신은 단순히 다시 Flowable.fromPublisher 전화를 걸거나 수 Flowable.defer(() -> publisher)이 : 쉬운 방법은 그 예외를 잡을 것 defer를 사용하여 가입자에게 중계하는 것입니다 위와 같습니다.

그렇지 않으면, RxJavaReactiveStreams하자 당신은 ObservablePublisher 변환 (필요한 경우) (예외를 포착하는 과정을 연기) :

Observable.defer(() -> 
    RxJavaReactiveStreams.toObservable(api.unreliablePublisher()))...