gpt4 book ai didi

java - 带有突变的 CompletableFuture 的恒等函数

转载 作者:行者123 更新时间:2023-12-02 09:57:48 26 4
gpt4 key购买 nike

我正在使用 CompletableFuture 来处理我的 REST 调用。我有一种情况,我必须进行两次调用:一个给出结果,我将多次使用它;另一个给出结果,我将使用该结果。另一个用之前的结果修改数据库。

现在,我像这样修复了它:

final CompletableFuture<A> future1 = f(request);
final CompletableFuture<A> future2 = future1.thenCompose(xml -> {
g(xml);
return CompletableFuture.completedFuture(xml);
});
return future2;

但是有没有办法让我可以写得更简洁,就像这样:

final CompletableFuture<A> future1 = f(request);
final CompletableFuture<A> future2 = future1.thenDoMagic(xml ->
g(xml)
);
return future2;

这样它就会自动返回future1的值,即xml

最佳答案

g also returns a future

那么您当前的代码很可能应该进行调整以等待 future 的完成。就目前情况而言,您才刚刚开始g ,它将在后台运行,但是您的 future2立即完成,甚至早于 g完成了。

怎么样

var getXml = f(request); 
return getXml
// wait for g to complete, but then return xml
.thenCompose(g)
.thenCompose(_ -> getXml);

如果您需要更简洁,您可以创建一个辅助方法(例如 andThen ),它接受 Future<X> 。和 lambda X -> Future<?> ,等待第二个 future 完成(纯粹是为了副作用,忽略结果),然后返回第一个 future 的结果。

var getXml = f(request);
return andThen(getXml, g);

我认为没有内置的功能。

关于java - 带有突变的 CompletableFuture 的恒等函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com