我想这样做:
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.switchiffempty,但是当someobject不为null时,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 switchiffempty()总是被调用
还尝试了mono.defer,但没有改变:
return Mono.justOrEmpty(someObject)
.flatMap(so -> service.monoObjectMethod(so)
.flatMap(so2 -> service.monoVoidMethod2(so2)))
.switchIfEmpty(Mono.defer(() -> service.monoVoidMethod(si)))
当monoviodmethod2和monoviodmethod1不是void类型时,一切都很好——但这不是我的情况。在我的系统中,monovoidmethod2和monovoidmethod1返回http状态,正文为空。
1条答案
按热度按时间yqyhoc1h1#
你的例子没有错误。干得好
如果你执行
test(1)
然后它会打印3。另一种方式,执行test(null)
返回一个10
-switchIfEmpty
价值观。---更新日期:2021年1月30日
我在考试中变了。
flatMap
因为so2返回一个空单声道。所以,两次调用test(1)
以及test(null)
返回10