https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/CompletableFuture.html#failedFuture-java.lang.Throwable-

твует довольно интенсивное использованиеio.vertx.core.Future в экосистеме vertx:https://vertx.io/docs/apidocs/io/vertx/core/Future.html

Пример использования VertxFuture это здесь:

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;
}

У меня сложилось впечатление, чтоio.vertx.core.Future имел какое-то отношение кjava.util.concurrent.Future, но кажется, что это не так. Как вы видите, способ сообщить будущему Vertx об ошибке - вызвать его метод fail ().

С другой стороны, у нас есть CompletableFuture, которая является реализациейjava.util.concurrent.Future интерфейс:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

Я не вижу метод сбоя в CompletableFuture, я вижу только «resol ()».

Так что я думаю, что единственный способ провалить CompletableFuture - это создать исключение?

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

кроме выдачи ошибки, есть ли способ "провалить" CompletableFuture? Другими словами, используя Vertx Future, мы просто вызываем f.fail (), но как насчет CompletableFuture?

Ответы на вопрос(1)

Ваш ответ на вопрос