0
給定以下代碼,result.block()等於「xx」,isError()== false,但繁榮錯誤處理程序運行,堆棧跟蹤顯示,承諾未完成。我希望結果是「ko」。帶有Project Reactor的Java:爲什麼Mono block()沒有看到錯誤?
我在做什麼錯?塊()的Javadoc說
將返回null的onComplete,T如果onNext
public class RApp {
static final Logger LOG = LoggerFactory.getLogger(RApp.class);
public static void main(String[] args) {
MonoProcessor<String> texecute = MonoProcessor.create();
Mono<String> result = texecute.delaySubscription(Duration.ofSeconds(2))
.onErrorReturn("ko")
.doOnNext(s -> parse(s)
.doOnSuccess(p -> LOG.info("promise completed {}", p))
.doOnTerminate((z, e) -> LOG.info("term value: {} , {}", z, e))
.doOnError(t -> {
LOG.error("boom", t);
})
.subscribe());
texecute.onNext("xx");
LOG.info("...............;");
String block = result.block();
LOG.info("r={}", block);
boolean error = texecute.isError();
LOG.info(error ? "error" : "no error");
texecute.dispose();
}
public static Mono<String> parse(String s) {
System.out.println("parse s = " + s);
if (s.equals("xx")) {
return Mono.error(new Exception("no xx"));
}
return Mono.just(s);
}
}