反应式 redis 流程问题
return valueOperations.set(regCodeKey, regCode, Duration.of(10, TimeUnit.MINUTES.toChronoUnit()))
.then(reactiveRedisTemplate.hasKey(regCodeObtainRecordKey)
.doOnSuccess(r ->
listOperations.leftPush(regCodeObtainRecordKey, current).doOnSuccess(x -> {
if (!r) {
reactiveRedisTemplate.expire(regCodeObtainRecordKey, Duration.of(30, TimeUnit.DAYS.toChronoUnit())).subscribe();
}
}).subscribe()
))
.doOnSuccess(r -> EmailMessageType.REGISTER.send(Lists.newArrayList(email), Lists.newArrayList(regCode)))
.map(r -> {
if (r) {
return GsonUtil.getGson().toJson(ResponseVO.ResponseCodeMsgMapping.SENDREG_SUCC.getResponse());
} else {
return GsonUtil.getGson().toJson(ResponseVO.ResponseCodeMsgMapping.SYS_ERROR.getResponse());
}
});
11 行的 doOnSuccess 能否在第二行 then 中的操作完全做完才进行(我感觉应该不太行)
如果不行应该怎么改 ----------------------- 以下是精选回复-----------------------
答:建议代码粘贴到 github ,然后在这里贴链接
答:return valueOperations.set(regCodeKey, regCode, Duration.of(10, TimeUnit.MINUTES.toChronoUnit()))
.then(reactiveRedisTemplate.hasKey(regCodeObtainRecordKey)
.doOnSuccess(hasRecordKey ->
listOperations.leftPush(regCodeObtainRecordKey, current).doOnSuccess(x -> {
if (!hasRecordKey) {
reactiveRedisTemplate.expire(regCodeObtainRecordKey, Duration.of(30, TimeUnit.DAYS.toChronoUnit()))
.doOnSuccess(opeSucc -> {
if (opeSucc) {
EmailMessageType.REGISTER.send(Lists.newArrayList(email), Lists.newArrayList(regCode));
}
}).subscribe();
}
}).subscribe()
))
.map(r -> {
if (r) {
return ResponseVO.ResponseCodeMsgMapping.SENDREG_SUCC.getResponse().toJson();
} else {
return ResponseVO.ResponseCodeMsgMapping.SYS_ERROR.getResponse().toJson();
}
});
想了想改了之后是这样的
但是还是有个问题,最后我要将整个流程完成与否的结果转化为 Mono<String>,但是如果像这样在最后 map 的话应该只是对 hasKey 的结果进行转化,有没有什么办法以最后整个流程完成的结果来转化
答:` ```java `这样贴不好吗?
0条评论