如何使用反应堆链中以前发布者的结果回滚/恢复?

问题描述

我在下面有一连串的出版商。

0 + 1

假设我也和我在一起

    Mono<Void> validateCost = validateCost(buyRequest);
    Mono<Void> validateBalance = validateBalance(buyRequest);

    Mono.when(validateCost,validateBalance)
             .then(issuePerk(buyRequest))
            .flatMap(issuePerkResponse -> paymentService.doPayment(buyRequest)
                    .map(paymentDetails -> new IssueAndPayResult(issuePerkResponse.getPerkIssueId(),paymentDetails)))
            .flatMap(issueAndPayResult -> saveOrder(issueAndPayResult,buyRequest));

我想要的是

  1. 如果 issuePerk 失败,让错误传播。
  2. 如果 paymentService.doPayment 失败,请调用 revertPerkIssue 并让错误传播。
  3. 如果 saveOrder 失败,请调用 revertPerkIssue 和 revertPayment 并让错误传播。

我不知道该怎么做。我尝试使用 doOnError 但如果任何单声道失败,让我们说问题振作,那么 doOnError 将被调用,这不是我想要的。 此外,我不希望重新评估 issuePerkResponseMono、payResultMono,这在 doOnError 中发生。

Mono<Void> revertPerkIssue(IssuePerkResponse)
Mono<Void> revertPayment(IssueAndPayResult)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)