switchIfEmpty 总是被调用

switchIfEmpty is always called

我有这样的方法:

fun getActiveVersionWithCacheMiss(type: String): Mono<ActiveVersion> {
        return activeVersionRepository.findByType(type)
                .switchIfEmpty(
                        Mono.defer(return persist(ActiveVersion(type,1)))
                )
    }

persist 方法是一种保存活动版本的简单方法:

fun persist(activeVersion: ActiveVersion): Mono<ActiveVersion>{...}

在我的测试中,我将 activeVersionRepository 模拟为 return findByType 的一个简单值。在调试期间 activeVersionRepository.findByType(type).block() 求值为一个值并且绝对不为空。 我想知道为什么尽管使用了 defer switchIfEmpty 仍然被调用?

问题是return。无论findByType是否发出值,switchIfEmpty的参数都需要求值,这意味着defer的参数需要求值,而return将return 出整个函数 getActiveVersionWithCacheMiss

虽然我看不出这段代码如何编译; return persist(...) 没有 Mono.defer 可以使用的值。你真的有大括号 {},而不是圆括号 () 吗?