转型成功的单声道
Transform mono on operations success
我正在处理以下用例的 Cloudfoundry Java client:
- 我执行 return 一个
Mono<Void>
的请求
- 在这个
Mono
成功后,我想执行一个可选的操作 returns a 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
中的代码永远不会执行。
Mono#filter
的 javadoc
状态:
If this Mono is valued, test the result and replay it if predicate returns true. Otherwise complete without value.
不确定如何理解...问题是,当第一个 return 是 Mono<Void>
时,如何链接成功的操作?
我只想在第一个成功时执行第二个,当过滤器谓词失败时 return 一个空的 Mono
。
Mono<Void>
表示 "Will either complete without value or error" 因为你不能实例化 Void
类型。
你需要的是then
运算符,它会忽略之前的结果和"switches"流向提供的Mono
.
还有 thenMany
以防你需要 "switch" 到 Flux
。
我正在处理以下用例的 Cloudfoundry Java client:
- 我执行 return 一个
Mono<Void>
的请求
- 在这个
Mono
成功后,我想执行一个可选的操作 returns aMono<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
中的代码永远不会执行。
Mono#filter
的 javadoc
状态:
If this Mono is valued, test the result and replay it if predicate returns true. Otherwise complete without value.
不确定如何理解...问题是,当第一个 return 是 Mono<Void>
时,如何链接成功的操作?
我只想在第一个成功时执行第二个,当过滤器谓词失败时 return 一个空的 Mono
。
Mono<Void>
表示 "Will either complete without value or error" 因为你不能实例化 Void
类型。
你需要的是then
运算符,它会忽略之前的结果和"switches"流向提供的Mono
.
还有 thenMany
以防你需要 "switch" 到 Flux
。