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?