【发布时间】:2018-11-20 13:06:54
【问题描述】:
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>。然后我要 zipWhen 返回Mono<RefreshToken>。
我仅通过使用then 替换返回的Mono<Void> 值来实现这一点:
refreshTokenReactiveRepository.deleteById(previousRefreshToken.getId())
.then(Mono.just(""))
那么,有没有更明确的方法来实现这个目标?在这种情况下 zipWhen 的替代方案是什么?
【问题讨论】:
标签: spring-webflux project-reactor