Como falhar em um java.util.concurrent.Future

Existe um uso bastante pesado deio.vertx.core.Future no ecossistema vertx:https: //vertx.io/docs/apidocs/io/vertx/core/Future.htm

Um exemplo de uso do VertxFuture é aqui

private Future<Void> prepareDatabase() {

  Future<Void> future = Future.future();

  dbClient = JDBCClient.createShared(vertx, new JsonObject(...));

  dbClient.getConnection(ar -> {    

    if (ar.failed()) {
      LOGGER.error("Could not open a database connection", ar.cause());
      future.fail(ar.cause());  // here
      return; 
    } 

    SQLConnection connection = ar.result();   
    connection.execute(SQL_CREATE_PAGES_TABLE, create -> {
        connection.close();   
        if (create.failed()) {
          future.fail(create.cause());  // here
        } else {
          future.complete();  
        }
     });
  });

  return future;
}

Tive a impressão de queio.vertx.core.Future tinha algo a ver comjava.util.concurrent.Future, mas parece que não. Como você pode ver, a maneira de dizer a um futuro da Vertx que falha é chamá-lo de método fail (

Por outro lado, temos CompletableFuture, que é uma implementação dojava.util.concurrent.Future interface:https: //docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.htm

Não vejo um método de falha no CompletableFuture, apenas vejo "resolve ()".

Então, meu palpite é que a única maneira de falhar em um CompletableFuture é lançar uma exceçã

CompletableFuture<String> f = CompletableFuture.supplyAsync(() -> {
    throw new RuntimeException("fail this future");
    return "This would be the success result";
});

além de lançar um erro, existe uma maneira de "falhar" em um CompletableFuture? Em outras palavras, usando um Vertx Future, chamamos f.fail (), mas e o CompletableFuture?

questionAnswers(1)

yourAnswerToTheQuestion