kotlin - 如何记录空 Mono

标签 kotlin spring-webflux project-reactor

假设我有以下几行

repository.findUser(name = "John Doe")
    .map {
        // User was found, continue processing
    }
    .switchIfEmpty(
        // Just log that the user was not found
    )

我目前的非最佳实践但有效的方法是将日志记录放在另一个函数中并调用它,例如 switchIfEmpty(userNotFound())

private fun userNotFound(): Mono<out Disposable> {
    logger.info { "No user was found." }
    return Mono.empty()
}

这可行,但我无法想象这是我应该做的。我该如何改进?

最佳答案

一种方法是在 switchIfEmpty 中使用 Mono.defer:

repository.findUser(name = "John Doe")
    .switchIfEmpty(Mono.defer{ ... })

或者,您可以使用 doOnSuccess 并检查 Mono 是否已在没有数据的情况下完成(Java 中的示例):

repository.findUser(name = "John Doe")
    .doOnSuccess(e -> {
      if (e == null) { 
        log.info("No user was found.");
      }
    })

关于kotlin - 如何记录空 Mono,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70542183/

相关文章:

types - 如何将数据类型映射到该数据类型的集合

android - 必须在 val 变量中初始化错误

android - Kotlin:如何将具有不同参数的函数作为参数传递给其他函数

java - 升级到 Spring 5.0.0.RELEASE - 无法实例化 hazelcast

java - 重试 Reactor 中的特定异常

java - 在 Mono 的阻塞线程上执行转换步骤

lambda - 在 lambda 中使用 return?

Azure AD 无法与 spring-boot webflux 配合使用

reactive-programming - 使用 Mono 值并用它来调用另一个 Mono

spring - 配置 Spring Security 5 Oauth 2 以使用 access_token uri 参数