【发布时间】:2021-05-02 19:23:38
【问题描述】:
我想做这样的事情:
if (someObject == null) {
return Mono.just(someId)
.flatMap(si -> service.monoVoidMethod(si));
}
return Mono.just(someObject)
.flatMap(so -> service.monoObjectMethod(so)
.flatMap(so2 -> service.monoVoidMethod2(so2)))
如果没有 if 语句,还有什么方法可以以更“反应性”的方式来做?我已经尝试过使用 Mono.switchIfEmpty,但是当 someObject 不为空时,monoVoidMethod 和 monoVoidMethod2 都被调用了。
return Mono.justOrEmpty(someObject)
.flatMap(so -> service.monoObjectMethod(so)
.flatMap(so2 -> service.monoVoidMethod2(so2)))
.switchIfEmpty(Mono.empty().flatMap(var -> service.monoVoidMethod(si)))
我发现了一个孪生话题:Mono switchIfEmpty() is always called
也尝试了 Mono.defer,但没有任何改变:
return Mono.justOrEmpty(someObject)
.flatMap(so -> service.monoObjectMethod(so)
.flatMap(so2 -> service.monoVoidMethod2(so2)))
.switchIfEmpty(Mono.defer(() -> service.monoVoidMethod(si)))
当 monoVoidMethod2 和 monoVoidMethod1 不是 Void 类型时,一切都运行良好——但这不是我的情况。在我的系统中,monoVoidMethod2 和 monoVoidMethod1 返回带有空正文的 http 状态。
【问题讨论】:
标签: java spring spring-webflux project-reactor