onErrorReturn di RxJava2 hanya menangkap kesalahan pertama

Saya melemparkan dua pengecualian dalam flowable, dan saya menggunakan onErrorReturn untuk menangkap pengecualian tersebut. Namun saya menemukan bahwa hanya pengecualian pertama yang tertangkap. Bagaimana cara menangkap semua pengecualian?

Flowable.create(emitter -> {
    emitter.onError(new Exception("error1"));
    emitter.onError(new Exception("error2"));
    }, BackpressureStrategy.MISSING)
        .onErrorReturn(e -> {
            System.out.println("Got error " + e.getMessage());
            return "error";
        })
        .subscribe();

Keluaran:

Got error error1
io.reactivex.exceptions.UndeliverableException: java.lang.Exception: error2
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
    at io.reactivex.internal.operators.flowable.FlowableCreate$BaseEmitter.onError(FlowableCreate.java:271)
    at com.example.springboottest.SimpleApplication.lambda$main$0(SimpleApplication.java:48)
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
    at io.reactivex.Flowable.subscribe(Flowable.java:13094)
    at io.reactivex.internal.operators.flowable.FlowableOnErrorReturn.subscribeActual(FlowableOnErrorReturn.java:33)
    at io.reactivex.Flowable.subscribe(Flowable.java:13094)
    at io.reactivex.Flowable.subscribe(Flowable.java:13030)
    at io.reactivex.Flowable.subscribe(Flowable.java:12890)
    at com.example.springboottest.SimpleApplication.main(SimpleApplication.java:54)
Caused by: java.lang.Exception: error2
    ... 8 more
Exception in thread "main" io.reactivex.exceptions.UndeliverableException: java.lang.Exception: error2
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
    at io.reactivex.internal.operators.flowable.FlowableCreate$BaseEmitter.onError(FlowableCreate.java:271)
    at com.example.springboottest.SimpleApplication.lambda$main$0(SimpleApplication.java:48)
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
    at io.reactivex.Flowable.subscribe(Flowable.java:13094)
    at io.reactivex.internal.operators.flowable.FlowableOnErrorReturn.subscribeActual(FlowableOnErrorReturn.java:33)
    at io.reactivex.Flowable.subscribe(Flowable.java:13094)
    at io.reactivex.Flowable.subscribe(Flowable.java:13030)
    at io.reactivex.Flowable.subscribe(Flowable.java:12890)
    at com.example.springboottest.SimpleApplication.main(SimpleApplication.java:54)
Caused by: java.lang.Exception: error2
    ... 8 more

person Searene    schedule 18.04.2018    source sumber


Jawaban (1)


Observable berakhir setelah selesai atau mengalami kesalahan. Ini adalah bagian dari kontrak dan tidak ada jalan lain untuk menghindari properti itu.

Satu-satunya cara Anda bisa menangani 'beberapa' pengecualian dalam sebuah observasi adalah jika itu ditangani seperti nilai, bukan pengecualian. Ini akan terlihat seperti konstruksi Either Scala dalam praktiknya.

person Kiskae    schedule 18.04.2018