项目 Reactor 堆栈中的条件行为

问题描述 投票:0回答:1

我需要创建一个从外部缓存获取数据的方法。如果找到数据,它会进行一些处理,否则它应该进行不同的处理。 该方法应返回 Mono

Mono<Void> myMethod() {
   return getDataFromCache()
             .flatMap(data -> processDataFromCache(data))
             .switchIfEmpty(Mono.defer(() -> doSomethingElse()));
}

我遇到的问题是,因为 processDataFromCache(data) 返回类型是 Mono,所以 switchIfEmpty 部分总是被执行。 有没有办法以不同的方式做到这一点?

spring-webflux project-reactor
1个回答
0
投票

如果您无法更改

processDataFromCache
doSomethingElse
的行为,那么您可以将它们与成功执行后出现的一些 fake 值连接起来:

Mono<Void> myMethod() {
   return getDataFromCache()
             .flatMap(data -> processDataFromCache(data).then("processed"))
             .switchIfEmpty(Mono.defer(() -> doSomethingElse().then("new")))
             .then();
}
© www.soinside.com 2019 - 2024. All rights reserved.