public interface RefreshTokenReactiveRepository extends ReactiveCrudRepository<RefreshToken, Long> {
Mono<RefreshToken> findByValue(String value);
}
Следующий метод находится в классе TokenService.
public Mono<TokenPair> exchangeRefreshToken(String refreshTokenValue) {
return refreshTokenReactiveRepository.findByValue(refreshTokenValue)
.zipWhen(
previousRefreshToken ->
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just("")),
(previousRefreshToken, deleteResult) -> previousRefreshToken
)
.map(RefreshToken::getAccount)
.flatMap(this::generateTokenPair);
}
Я хочу выполнить refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
побочную операцию, которая зависит от предыдущего результата моно (Mono<RefreshToken>
) и returns Mono<Void>
.Тогда я хочу zip, когда вернусь Mono<RefreshToken>
.
Я достиг этого только с помощью then
для замены возвращаемого значения Mono<Void>
:
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
Итак, есть ли более четкие способы достижения этой цели?Какая альтернатива для zip при этом?