反应式 redis 流程问题

2021-11-27 18:32:17 +08:00
 77yf77yf77yf
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 中的操作完全做完才进行(我感觉应该不太行)
如果不行应该怎么改
1652 次点击
所在节点    Java
5 条回复
yidinghe
2021-11-27 19:29:18 +08:00
建议代码粘贴到 github ,然后在这里贴链接
77yf77yf77yf
2021-11-27 19:42:26 +08:00
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 的结果进行转化,有没有什么办法以最后整个流程完成的结果来转化
77yf77yf77yf
2021-11-27 19:43:09 +08:00
77yf77yf77yf
2021-11-27 19:45:27 +08:00
@yidinghe 已贴到 github ,有空希望再看一下,谢谢
jalena
2021-11-28 09:58:47 +08:00
` ```java `这样贴不好吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX