Cómo fallar un java.util.concurrent.Future
Hay un uso bastante intenso deio.vertx.core.Future
en el ecosistema vertx:https: //vertx.io/docs/apidocs/io/vertx/core/Future.htm
Un ejemplo de uso de VertxFuture
es aquí
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;
}
Tenía la impresión de queio.vertx.core.Future
tuvo algo que ver conjava.util.concurrent.Future
, pero parece que no. Como puede ver, la forma de decirle a un futuro de Vertx que falle es llamar a su método fail ().
Por otro lado, tenemos CompletableFuture, que es una implementación dejava.util.concurrent.Future
interfaz:https: //docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.htm
No veo un método de falla en CompletableFuture, solo veo "resolve ()".
¿Entonces supongo que la única forma de fallar un CompletableFuture es lanzar una excepción?
CompletableFuture<String> f = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("fail this future");
return "This would be the success result";
});
besides arrojando un error, ¿hay alguna manera de "fallar" un CompletableFuture? En otras palabras, usando un Vertx Future, simplemente llamamos f.fail (), pero ¿qué pasa con un CompletableFuture?