【发布时间】:2018-03-04 07:55:39
【问题描述】:
嗯,这听起来与反应式编程的含义相反,但我无法理解处理空值/异常的方法。
private static class Data {
public Mono<String> first() {
return Mono.just("first");
}
public Mono<String> second() {
return Mono.just("second");
}
public Mono<String> empty() {
return Mono.empty();
}
}
我理解从根本上说,除非发布者发布事件,否则订阅者不会采取行动。所以这样的代码可以工作。
Data data = new Data();
data.first()
.subscribe(string -> Assertions.assertThat(string).isEqualTo("first"));
如果第一次调用返回空,我可以这样做。
Data data = new Data();
data.empty()
.switchIfEmpty(data.second())
.subscribe(string -> Assertions.assertThat(string).isEqualTo("second"));
但是当两个调用都返回空时,我该如何处理(通常这是需要传播给用户的异常情况)。
Data data = new Data();
data.empty()
.switchIfEmpty(data.empty())
.handle((string, sink) -> Objects.requireNonNull(string))
.block();
由于没有发布事件,因此在上述示例中未调用句柄。
【问题讨论】:
-
不是专家,所以我不会将其作为答案发布,但为什么不第二次调用 switchIfEmpty(),以 Mono.error() 作为参数,然后传递错误回调在 subscribe() 中处理错误?
-
谢谢!我相信这似乎是最好的方法!