我有以下代码重新调整 Mono<Foo>:
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。