Java CompletableFuture:避免回调地狱

前端之家收集整理的这篇文章主要介绍了Java CompletableFuture:避免回调地狱前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我对Java中的CompletableFuture有疑问.我正在等待CompletableFuture完成,并且根据收到的结果,我想要调用一个新任务并等待CompletableFuture完成或做一些不同的事情.我对我的解决方案不满意,因为有很多回调,并且阅读不同.你能帮助我改进我的代码吗?

final CompletableFutureCompletableFuture<>();

final ActorRef processCheckActor = actorSystem.actorOf(
    springExtension.props("ProcessCheckActor"),"processCheckActor-" + new Random().nextInt());

final CompletableFuturetocheckMessage(processId),TIMEOUT)
        .toCompletableFuture();

checkResponse.thenAccept(obj -> {
  final ProcessCheckResponseMessage msg = (ProcessCheckResponseMessage) obj;
  if (msg.isCorrect()) {
    final CompletableFutureCompletableFuture();

    response.thenAccept(obj2 -> {
      future.complete("yes");
    });
  } else {
    future.complete("no");
  }
});
最佳答案
首先,您应该避免创建CompletableFuture< Object>.泛型类型应该是函数返回的类型(在您的情况下为CompletableFuture< ProcessCheckResponseMessage>).这样你就不需要演员了.

我建议使用thenApply而不是thenAccept.这将为您创建第二个CompletableFuture,这意味着您不再需要第一行中的声明.

最后,作为一般规则,你应该三思而后行多线lambda,并且绝对避免使用嵌套的lambdas.您应该考虑为这些lambda创建一个新方法.

原文链接:https://www.f2er.com/java/437359.html

猜你在找的Java相关文章