【问题标题】:How to chain operations with side effects?如何将操作与副作用链接起来?
【发布时间】:2021-08-01 03:45:25
【问题描述】:

我有两种方法允许以异步方式访问底层存储

private Mono<String> read(String key) { }
private Mono<Boolean> delete(String key) { }

我想创建另一个异步方法,该方法将读取值并立即删除它并返回读取值。我能够以一种非常丑陋的方式管理它。

public Mono<String> readAndDelete(String key) {
    Mono<String> read = read(key).cache();
    return read.then(delete(key)).then(read);
}

但我确信必须存在更优雅和正确的方法。我怎样才能实现它?

除了Auktis提出的答案,delayUntil方法也可以达到类似的效果

public Mono<String> readAndDelete(String key) {
    return read(key).delayUntil(value -> delete(key));
}

根据文档delayUnit 解析单声道,然后触发另一个指定为参数的单声道,最后返回第一个解析单声道的结果。

【问题讨论】:

  • 您在寻找doOnSuccess吗?
  • doOnSuccess 接受Consumer,因此可以对读取做出反应,但不允许安排delete 方法调用。还是我错过了什么?
  • 你所说的“时间表”到底是什么意思?

标签: java reactive-programming project-reactor


【解决方案1】:

这是一个-我希望-更优雅的方式的命题:

public Mono<String> readAndDelete(String key) {
    return read(key)
        .flatMap(value -> delete(key)
            .thenReturn(value)
        );
}

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2023-04-08
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多