簡體   English   中英

即使發生錯誤也會調用 then()

[英]then() is called even though error is occured

以下代碼讓我感到困惑

doSomething()
.then(doSomethingElse())
    .onErrorResume(throwable -> {
        System.out.println("Error occurred");
        return Mono.empty();
    })

private Mono<Void> doSomething() {
    System.out.println("Error thrown");
    return Mono.error(new RuntimeException());
}

private Mono<Void> doSomethingElse() {
    System.out.println("doSomethingElse");
    return Mono.empty();
}

輸出:

Error thrown
doSomethingElse
Error occurred

為什么 then() 在返回錯誤時被調用,不應該被跳過嗎? 我期望以下輸出:

Error thrown
Error occurred

實現預期行為的正確方法是什么? 換句話說,只有當 doSomeError 沒有產生任何錯誤時才應該調用 then()。

由於 doSomethingElse 在流本身的創建過程中被調用,您應該按如下方式更改函數以獲得預期結果;

   private Mono<Void> doSomethingElse() {
        return Mono.fromSupplier(() -> {
            System.out.println("doSomethingElse");
            return null;
        });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM