我正在针对以下用例处理Cloudfoundry Java client:
Mono<Void>
Mono
后,我想执行一个返回Mono<String>
的可选操作filter
,但似乎不起作用所以,它看起来像这样:
Mono<Void> service = createService();
Mono<String> serviceKey = service.filter( x -> someBoolean)
.map( x -> someKey)
.flatMap(key -> {
Mono<String> key = serviceKey(key);
return key;
});
serviceKey.blockOptional() //returns Empty
我的期望是,当service
成功并且filter
操作成功时,第二次调用serviceKey
将会发生。但是,我在调试器中看到flatMap
中的代码永远不会执行。
javadoc
的{{1}}状态:
如果此Mono被赋值,请测试结果,如果谓词返回true,则重播该结果。否则就没有价值。
不确定如何理解...问题是,当第一个返回Mono#filter
时如何链接成功的操作?
我只想在第一个成功的情况下执行第二个,并在过滤谓词失败时返回一个空的Mono<Void>
。
答案 0 :(得分:1)
Mono<Void>
的意思是“将完成而没有值或错误”,因为您无法实例化Void
类型。
您需要的是then
运算符,它将忽略先前的结果并将流“切换”到提供的Mono
。
还有thenMany
,以防您需要将其“切换”到Flux
。