如何有条件地执行
我有一个返回Mono的方法
有人能帮我找到合适的供应商运营商吗?
public static void main(String[] args) {
Mono.just("GOOD_SIGNAL")//It can also be a BAD_SIGNAL
.flatMap(s -> firstMethod(s))
.then(secondMethod())
.subscribe()
;
}
private static Mono<String> secondMethod() {
//This method call is only valid when the firstMethod is success
return Mono.just("SOME_SIGNAL");
}
private static Mono<Void> firstMethod(String s) {
if ("BAD_SIGNAL".equals(s)) {
Mono.error(new Exception("Some Error occurred"));
}
return Mono
.empty()//Just to illustrate that this function return Mono<Void>
.then();
}
-谢谢
首先,我想强调的是,Reactor的Mono/通量(下一步将考虑Mono)有以下调节操作符(至少我知道):
Mono#defaultIfEmpty
第二点是单声道,然后:
忽略此单声道中的元素,并将其完成信号转换为所提供单声道的发射和完成信号。错误信号将在生成的单声道中重放。
因此,这意味着无论之前的值是什么,都将返回该值(空的或提供的)。
考虑到所有这些因素,您的解决方案应该是这样的:
public static void main(String[] args) {
Mono.just("GOOD_SIGNAL")//It can also be a BAD_SIGNAL
.flatMap(s -> firstMethod(s))
.switchIfEmpty(secondMethod())
.doOnError(...)//handle you error here
.subscribe();
}
private static Mono<String> secondMethod() {
//This method call is only valid when the firstMethod is success
return Mono.just("SOME_SIGNAL");
}
private static Mono<Void> firstMethod(String str) {
return Mono.just(str)
.filter(s -> "BAD_SIGNAL".equals(s))
.map(s -> new Exception("Some Error occurred: "+s))
.flatMap(Mono::error);
}
则
在其源代码中传播错误,因此它涵盖了这方面。据我了解,您不能使用平面地图
而不是则
的原因是源代码为空,这是由于firstMethod()
。在这种情况下,将deer()
和然后()
结合起来以实现您所寻求的懒惰:
Mono.just("GOOD_SIGNAL")//It can also be a BAD_SIGNAL
.flatMap(s -> firstMethod(s))
.then(Mono.defer(this::secondMethod))
.subscribe();
如果我在通量上有两个平面图,它们是否总是按顺序执行
假设我有一个具有方法的存储库,该方法返回的,其中是一个表示美国状态的类,它有两个字段(带有getter/setters):和。 我想获得Flux中所有的填充字段之和。我从Iterable创建了一个Flux,如下所示: 我有我的通量,但我不知道一个好的方法来总结它的价值。我试过 然而,编译器说total“应该是最终的或有效的最终的”。添加显然不会起作用,因为我正在尝试添加。 我如何对通量进行求和(或
我是项目Reactor或反应式编程的新手,所以我可能做错了什么。我正在努力构建一个执行以下操作的流程: 给定类实体: 从DB读取实体(
我需要从Reactor项目中解释这两种方法 文档链接 发布() 准备一个可连接的通量,该通量共享该通量序列,并以背压感知的方式向订户发送值。 和 发布(整型预取) 准备一个可连接的通量,该通量共享该通量序列,并以背压感知的方式向订户发送值。 大理石图对两者都是一样的。什么是参数? 我运行了这些例子,结果是一样的
我有这个界面: 我想测试它的实现,但我得到: 在测试中,我使用: 我错过了什么
顺便说一句,我还在学习WebLUX;我不知道这是不是可能的,或者我有错误的方法,但考虑到这种平行的通量。 调用具有webclient请求的方法(service.getamono) 我需要等待enablers Flux的流结束,并处理它内部的所有响应,原因是如果其中一个给我错误或否定的响应,我不会运行这个其他并行Flux的阻塞器 我想过“zip”方法,但这一个合并了两个响应,并不是我想要的,如果任何