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?