这是样板代码:我想做这样的事情-
public Flux<Object2> getSomething(String email) {
method1(email).map(result -> { //method1 returns Mono<Object1>
if(result.id().isEmpty()) {
return method2(email); //method2 returns Flux<Object2>
} else {
return Flux.empty();
}
};
});因此,当method1返回空的Object1.id()时,只调用method2。否则返回空通量。
要注意的指针是-
在上面的代码片段中:
try {
method1(email);
} catch(IllegalArgumentException e) {
return method2(email);
}这里从来没有破例。
发布于 2018-08-30 20:06:32
您的第一个代码段不应该编译,因为方法实现没有重新调整任何内容,所以我将尝试猜测发生了什么。
这里不会发生任何事情,因为您正在创建的发布者不会被该方法返回。如果没有订阅那个Flux/Mono,什么都不会发生。。
public Flux<Object2> getSomething(String email) {
return method1(email)
.filter(result -> result.id().isEmpty())
.flatMapMany(result -> method2(email));
}然后,可以使用filter筛选出结果,如果不满足谓词,则不从该Mono发出任何内容。此外,flatMapMany将帮助您在这里以预期的返回类型返回结果。
发布于 2018-09-01 06:43:48
您应该使用switchIfEmpty()运算符。
另外,如果希望从方法返回这两种类型(Mono和Flux),那么将返回类型更改为org.reactiveStreams.Publisher。不过,我不建议你这么做。
而是返回一个通量。即使只有一个数据可以返回,但仍然可以作为Flux返回。将Mono转换为Flux,如果它空用户switchIfEmpty操作符,则发送不同的Flux。
https://stackoverflow.com/questions/52101410
复制相似问题