如何记录空单声道

How to log empty Mono

假设我有以下几行

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.");
      }
    })