我有以下代码重新调整 Mono
try {
return userRepository.findById(id) // step 1
.flatMap(user -> barRepository.findByUserId( user.getId()) // step 2
.map(bar-> Foo.builder().msg("Already exists").build()) // step 3
.switchIfEmpty(barRepository.save(Bar.builder().userId(user.getId()).build()) // step 4
.map(bar-> Foo.builder().msg("Created").build()) // step 5
))
.doOnError(throwable -> Mono.just(handleError(throwable)));
} catch(Exception e) {
log.error("from catch block");
return Mono.just(handleError(e));
}
如果在步骤 1 中发生错误(例如用户不存在指定的 id),它会被 doOnError 或 try catch 块捕获,还是这两者都不会?
如果在步骤 2、步骤 3、步骤 4 中发生错误,同样的问题。
使错误始终被 doOnError 捕获并消除 try catch 的正确代码是什么?
我正在使用 public interface UserRepository extends ReactiveMongoRepository<User, String>
与 barRepository 相同。
handleError(throwable) 只是执行 log.error(e.getMessage() 并返回 Foo。
原文由 ace 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为第一个错误在标题中:“Mono or Flux”与错误处理无关。
要处理错误,您可以按照以下示例进行操作: