V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
77yf77yf77yf
V2EX  ›  Java

反应式 redis 流程问题

  •  
  •   77yf77yf77yf · Nov 27, 2021 · 2416 views
    This topic created in 1620 days ago, the information mentioned may be changed or developed.
    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 中的操作完全做完才进行(我感觉应该不太行)
    如果不行应该怎么改
    5 replies    2021-11-28 09:58:47 +08:00
    yidinghe
        1
    yidinghe  
       Nov 27, 2021 via Android
    建议代码粘贴到 github ,然后在这里贴链接
    77yf77yf77yf
        2
    77yf77yf77yf  
    OP
       Nov 27, 2021
    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
        4
    77yf77yf77yf  
    OP
       Nov 27, 2021
    @yidinghe 已贴到 github ,有空希望再看一下,谢谢
    jalena
        5
    jalena  
       Nov 28, 2021
    ` ```java `这样贴不好吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3543 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 00:11 · PVG 08:11 · LAX 17:11 · JFK 20:11
    ♥ Do have faith in what you're doing.