Type mismatch: cannot convert from Mono to Mono. Wants to add error messge to B then i wants to return Mono of B.
public Mono<B> case1(){
A a = new A();
a.setName("srihari");
B b = new B();
a.setName("G SRIHARI");
Mono<A> mono = Mono.error(new RuntimeException("HARISRI"));
return mono.onErrorResume(d->{
b.setErrorMessage(d.getMessage());
return Mono.just(b);
}).subscribeOn(Schedulers.elastic());
答案 0 :(得分:1)
正如您在onErrorResume()
的{{3}}中所看到的那样,后备功能只能生成与源Mono类型相同的Mono。这是有充分理由的。
如果您改为使用Mono<A> mono = Mono.just(new A());
,该怎么办。现在,将不会引发任何错误,因此永远不会调用fallback函数。因此,您仍然有Mono<A>
,不是 Mono<B>
。
Reactor并没有什么特别的地方。使用try catch来考虑相同的流程:
public B foo() {
try {
// throw new RuntimeException();
return new A();
} catch (Exception e) {
return new B();
}
}
很显然,此代码无法编译,因为如果未引发错误,将返回A
,但是该方法必须返回B
。本质上,这就是您要使用Reactor编写的内容。