我有
Mono<MyClass1>
的实例
它可能有价值,也可能是错误。现在我需要将其转换为
Mono<MyClass2>
,其中错误和无错误翻转
mono
.doMagic( $ -> {
if( error ) {
return Mono.just( new MyClass2 .. )
}
else if( no-error ) {
return Mono.error(...)
}
}
这可能吗?
您可以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