我应该如何在 Java 中结合可完成的期货和 try/catch?

How should I combine completable futures and try/catch in Java?

我有一个方法结合了其他两种方法的结果,一种是同步的,如果出现问题会抛出异常,另一种是 returns 可完成的未来,如果出现问题则抛出异常出错。我希望我的方法的使用者不必处理在两个不同的地方捕获同步和异步异常,有没有一种合适的方法可以将它们组合成一个异常输出?

如果你想让你的外部方法 return a CompletableFuture,那么通常最好 always returns a CompletableFuture -- 没有抛出也没有空值。

这样一来,调用者只需通过一条路径处理异常或空值。

当外部方法进行同步调用时,确保它在 try 块中,捕获任何异常并 return 异常完成 CompletableFuture

如果您使用的是 java 9 或更高版本,则可以使用 CompletableFuture.failedFuture 使错误发生在未来。否则,您可能应该制作一个辅助方法来创建新的未来并立即调用 completeExceptionally

除了按照 there is CompletableFuture.thenCompose 的建议将同步方法调用包装到 CompletableFuture 中以组合两个单独的期货结果。