Java-使用CompletableFuture链中断执行序列
我是Java新手,正在使用CompletableFutures执行异步操作,如下所示:Java-使用CompletableFuture链中断执行序列,java,Java,我是Java新手,正在使用CompletableFutures执行异步操作,如下所示: public CompletionStage insertOrUpdate(字符串参与者,字符串键){ 返回这个.objectDAO.getByKey(key) 。然后应用(mapDOToContainer(键)) .然后应用(合并容器TODO(键,参与者)) .ThencomposeSync(this.objectDAO.UpdateFn()) .thenApply(DBResult::finished)
public CompletionStage insertOrUpdate(字符串参与者,字符串键){
返回这个.objectDAO.getByKey(key)
。然后应用(mapDOToContainer(键))
.然后应用(合并容器TODO(键,参与者))
.ThencomposeSync(this.objectDAO.UpdateFn())
.thenApply(DBResult::finished)
。然后应用(完成->{
如果(完成){
Response=Response.ok().build();
返回其中一个。对(响应);
}否则{
返回.left(ErrorResponse.create(“Error”,400));
}
});
}
现在我需要修改它,如果get失败,那么我执行上面的链,但是如果它成功,那么我需要断开这个链,从函数返回一个包含ErrorResponse的对象
我如何打破这个处理链?我知道我可以向链中的每个函数传递一个标志,并根据标志的值执行函数中的操作来实现这一点。我希望有更好的方法来做到这一点
谢谢 我会重写你的代码
- 这两种方法都不能用于错误,Java有异常
- 不要从DAO返回CompletionStage
- 使用CompletableFuture中的
,它是为此而设计的例外
public CompletionStage<Response> insertOrUpdate(String actor, String key) {
return CompletableFuture.supplyAsync(() -> this.objectDAO.getByKey(key))
.thenApply(mapDOToContainer(key))
.thenApply(mergeContainerToDO(key, actor))
.thenComposeAsync(this.objectDAO.UpdateFn())
.thenApply(DBResult::finished)
.thenApply(finished -> {
Response response = Response.ok().build();
return response;
})
.exceptionally(e -> ErrorResponse.create("Error", 400));
}
您可能必须确保ErrorResponse是Response的一个子类,才能使其正常工作。我将重写您的代码
- 这两种方法都不能用于错误,Java有异常
- 不要从DAO返回CompletionStage
- 使用CompletableFuture中的
,它是为此而设计的例外
public CompletionStage<Response> insertOrUpdate(String actor, String key) {
return CompletableFuture.supplyAsync(() -> this.objectDAO.getByKey(key))
.thenApply(mapDOToContainer(key))
.thenApply(mergeContainerToDO(key, actor))
.thenComposeAsync(this.objectDAO.UpdateFn())
.thenApply(DBResult::finished)
.thenApply(finished -> {
Response response = Response.ok().build();
return response;
})
.exceptionally(e -> ErrorResponse.create("Error", 400));
}
您可能必须确保ErrorResponse是Response的一个子类,才能使其正常工作。异常将断开此链。CompletableFuture有特殊的方法来处理异常情况,我也不会使用
返回错误,这是针对没有异常的语言。您可以应用like可选的.of(objectDAO.getByKey(key))
。或者DAO的方法可以返回一个可选的,因为显然有一个选项,这个DAO找不到键。关键是:在这里很有用。一个例外会打破链条。CompletableFuture有特殊的方法来处理异常情况,我也不会使用返回错误,这是针对没有异常的语言。您可以应用like可选的.of(objectDAO.getByKey(key))
。或者DAO的方法可以返回一个可选的,因为显然有一个选项,这个DAO找不到键。重点是:在这里很方便。谢谢!我对“异常”的用法有点困惑,但这就清楚了。谢谢!我对“例外”的用法有点困惑,但这就清楚了。