2017-01-26 6 views
0

RxJavaに「サードパーティ」パブリッシャーをラップしようとしています。購読中に、私は出版社を準備しており、これにより例外が発生する可能性があります(出版社が利用できない場合)。申し込み時に例外が発生した場合はどうなりますか?

例外はどうしたらいいですか?

1)subscribeメソッドからスローしますか?

2)オブザーバーのOnErrorメソッドにプッシュしますか?

3)他に何か?

私はOnErrorにプッシュすることを考えています。サブスクリプションを実装する方法は? OnErrorがサブスクリプションの最後のイベントでなければならない場合、私はサブスクリプションとみなすべきかどうか? Subscriptionとして返すものは?ただNOPラムダですか?

答えて

0

私はOnErrorにプッシュすることを考えていますが、サブスクリプションを実装する方法は? OnErrorをサブスクリプションの最後のイベントにする必要がある場合は、サブスクリプションを行うかどうかを検討する必要がありますか?サブスクリプションとして返却するものちょうどNOPラムダ?

これは、実際にRxJava自体が通常、各演算子の「コンストラクタ」で例外を処理する方法です。

RxJava2を使用している場合は、さらに注意する必要があるルールが1つあります。そして、onErroronCompleteの前に常にSubscriber.onSubcribe()を呼び出す必要があるので、すぐに例外をスローする場合でも、onSubscribeonErrorの両方を呼び出す必要があります。

1

"パブリッシャー"と "ラップ"が何を意味するのかは少し不明です。

たとえば、Observableを返すAPI呼び出しがありますが、呼び出し自体が未チェックの例外をスローする可能性があります。簡単な方法は、その例外をキャッチし、加入者にそれを中継することdeferを使用することです:

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

あなたが反応ストリームPublisherとRxJava 2を持っている意味場合は、もう一度、Flowable.fromPublisherを呼び出したりすることができ、Flowable.defer(() -> publisher)上記のように。

そうでない場合、あなたはObservablePublisherを変換RxJavaReactiveStreamsましょう(と(延期)必要に応じて例外をキャッチするためのプロセス):

Observable.defer(() -> 
    RxJavaReactiveStreams.toObservable(api.unreliablePublisher()))... 
関連する問題