如何使用Java中的projectreactor将错误翻转为无错误?

问题描述 投票:0回答:1

我有

Mono<MyClass1>

的实例

它可能有价值,也可能是错误。现在我需要将其转换为

Mono<MyClass2>
,其中错误和无错误翻转

mono
   .doMagic( $ -> {
      if( error ) {
         return Mono.just( new MyClass2 .. )
      }
      else if( no-error ) {
         return Mono.error(...)
      }

   }

这可能吗?

java project-reactor
1个回答
0
投票

您可以materialize/dematerialize“onNext”、“onError”和“onCompleted”的“低级”信号。在

map()
调用中,您可以检查是否有“onNext”信号或“onError”信号,并生成交换的“onError”信号或“onNext”信号。代码可以如下所示:

public static void main(String[] args) throws Exception {
    Mono<First> source = Mono.just(new First());
    //Mono<First> source = Mono.error(new RuntimeException());
    Mono<Second> sourceSecond = source.materialize().map(it -> {
        if (it.isOnError()) {
            return Signal.next(new Second());
        } else {
            return Signal.error(new RuntimeException());
        }
    }).dematerialize();
    sourceSecond.subscribe(
            it -> { System.out.println("Value received"); },
            e -> { System.out.println("Error received"); },
            () -> { System.out.println("Completed"); });
}

第一个变体会给你一个错误:

Error received

第二个变体(当您交换

source
变量时)将为您提供一个值:

Value received
Completed
© www.soinside.com 2019 - 2024. All rights reserved.