onErrorReturn ใน RxJava2 พบเฉพาะข้อผิดพลาดแรกเท่านั้น

ฉันโยนข้อยกเว้นสองข้อใน flowable และฉันใช้ onErrorReturn เพื่อตรวจจับข้อยกเว้นเหล่านั้น แต่ฉันพบว่ามีเพียงข้อยกเว้นแรกเท่านั้นที่ถูกจับได้ จะจับข้อยกเว้นทั้งหมดได้อย่างไร?

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();

เอาท์พุท:

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 แหล่งที่มา


คำตอบ (1)


Observable สิ้นสุดหลังจากเสร็จสิ้นหรือพบข้อผิดพลาด นี่เป็นส่วนหนึ่งของสัญญาและไม่มีทางแก้ไขทรัพย์สินนั้นได้

วิธีเดียวที่คุณสามารถจัดการข้อยกเว้น 'หลายรายการ' ในการสังเกตได้คือหากได้รับการจัดการเหมือนกับค่า ไม่ใช่ข้อยกเว้น สิ่งนี้จะดูเหมือน โครงสร้าง Either ของ Scala ในทางปฏิบัติ

person Kiskae    schedule 18.04.2018