类型不匹配:无法从Mono <a> to Mono<b>

时间:2019-05-25 08:44:45

标签: project-reactor

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());

1 个答案:

答案 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编写的内容。