链接几种方法的正确方法称为反应式,即无阻塞。
这是一个类似的问题。
Chaining method calls using RxJava
/**
* Delete a user, including VerificationToken and PasswordResetToken if exist.
*
* @param user The user to delete.
* @return A void Mono.
*/
@Override
public Mono<Void> deleteUser(final User user) {
return tokenRepository.findByUser(user) //May return empty
.flatMap((VerificationToken t) -> {
return tokenRepository.delete(t); //Token exists, delete
})
.then(passwordTokenRepository.findByUser(user) //May return empty
.flatMap((PasswordResetToken t) -> {
return passwordTokenRepository.delete(t); //Token exists, delete
}))
.then(userRepository.delete(user)); //Must execute regardless
}
我对三个不同的ReactiveCrudRepositories进行了几种方法调用,其中前两个调用只是检查现有令牌,如果未找到,则可能返回一个空的Mono。所有方法都应完成,但是无论前两个调用中的任何一个是否找到令牌,删除用户都必须始终执行。
是否有更好的方法来做到这一点?或者这是正确的吗?