2
subscribeOn
とflatMap
を組み合わせるとUndeliverableException
が表示されます。この最小限の例では、この問題を示していますrxJava 2スレッドプールとflatMapでの配信不能
@Test
public void flatMapException() throws ExecutionException, InterruptedException {
SettableFuture<Boolean> f = SettableFuture.create();
Observable.just(1,2).flatMap(x -> {
return Observable.just(1).flatMap(z -> {
if (z == 1) return Observable.error(new IOException("haha"));
return Observable.just(1);
}).subscribeOn(Schedulers.computation());
}).onErrorReturnItem(1).subscribeOn(Schedulers.computation()).subscribe(
x -> {},
e -> {
f.set(true);
},() -> {
f.set(true);
});
assertEquals(true, f.get());
}
私は最初のエラーの後に観察可能で実行が停止し、登録解除を解雇されていることを期待しました。
最初の正常終了後にflatMap
で返された2番目のObservableを購読したいと思います。
RxJavaで私の意図を表現するにはどうすればよいですか?
'subscribeOn'は、2つのサブスクリプションが非同期になりので、あなたが観察できる第一および第二のエラーからのレースを持っています。両方のエラーを収集するには、外側の 'flatMap'の' delayErrors'パラメータを使用することができます。 – akarnokd