如何链接有副作用的操作?
How to chain operations with side effects?
我有两种方法允许以异步方式访问底层存储
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
解析单声道,然后触发另一个指定为参数的单声道,最后 returns 第一个解析的单声道的结果。
这里有一个命题 - 我希望 - 更优雅的方式:
public Mono<String> readAndDelete(String key) {
return read(key)
.flatMap(value -> delete(key)
.thenReturn(value)
);
}
我有两种方法允许以异步方式访问底层存储
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
解析单声道,然后触发另一个指定为参数的单声道,最后 returns 第一个解析的单声道的结果。
这里有一个命题 - 我希望 - 更优雅的方式:
public Mono<String> readAndDelete(String key) {
return read(key)
.flatMap(value -> delete(key)
.thenReturn(value)
);
}