如何将异常从内部doOnError传播到外部doOnError?

时间:2019-04-11 11:09:08

标签: java rx-java reactive-programming

我有pay方法,在此方法中,我应该调用initializePayment,在onSuccess中,我应该调用confirmPayment。 如果两个调用中的任何一个发生异常,它都应该发出异常

public Single<PayResponse> pay(PayRequest apiRequest) {

            return client.initiatePayment(apiRequest)
                    .doOnSuccess(initiatePaymentResponse -> {
                        client.confirmPayment(initiatePaymentResponse.getPaymentId())
                                .doOnSuccess(confirmPaymentResponse -> doConfirmationLogic(confirmPaymentResponse ))
                                .doOnError(ex -> {ex.printStackTrace();logError(ex);});
                    })

                    .doOnError(ex -> {ex.printStackTrace();logError(ex);});
        }

在我引用的代码中,confirmPayment中发生错误,但initiatePayment正常地继续。

如何将异常从内部 doOnError 传播到外部 doOnError

1 个答案:

答案 0 :(得分:1)

doOnXxx ()方法仅用于回调目的,并且不涉及流传输管道,因此它们被称为“副作用方法”。因此无法将错误从doOnXxx()传播到上游。

错误始终是Rx世界中的终端事件,每当发生错误时,管道都会被取消,因此无需对doOnSuccess()方法做任何事情以确保到目前为止一切都正常。因此,除了将代码嵌套到doOnSuccess()链中之外,您可以简单地编写以下方式:

192.168.122.1