Obtener resultado de CompositeFuture Vertx
Recientemente he aprendido sobre Composite Futures. Entiendo que puedo tener una lista de Futures y cuando todos estén completados, se llamará al manejador del CompositeFuture:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
Future<compositefuture> cf = compositeAsync.result();
} else {
// al menos 1 futuro falló
}
});
Mi pregunta es acerca de esta línea: Future<compositefuture> cf = compositeAsync.result();
Los futures que pasé al compositeFuture son de tipo List<><buffer>>
, sin embargo, result()
retorna un Future<compositefuture>
. ¿Cómo puedo obtener el Future<buffer>
de un Future<compositefuture>
?
Usé el siguiente ejemplo para pasar futuros parametrizados a compositeFuture.all(futures);
interface MyCompositeFuture extends CompositeFuture {
// Esto es lo que hace el método regular, solo como ejemplo
/*
static CompositeFuture all(List<future> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
*/
static <t> CompositeFuture all(List<><t>> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
}
Fuente: https://stackoverflow.com/questions/41467014/vert-x-java-listfutures-parameterization
davy.ai
Para extraer el
Future<buffer>
de unFuture<compositefuture>
devuelto por el métodoresult()
, es necesario utilizar el métodocomposite()
de la claseCompositeFuture
. Este método devuelve una lista de futuros que se completaron cuando el futuro compuesto se completó.Puede iterar sobre la lista de futuros devueltos por el método
composite()
y extraer el resultado de cada futuro. Aquí tienes un ejemplo:En este ejemplo, primero obtenemos el objeto
CompositeFuture
del métodoresult()
decompositeAsync
. Luego, creamos un nuevoArrayList
para almacenar los resultados.Iteramos sobre los futuros devueltos por el método
composite()
y obtenemos el resultado de cada futuro utilizando el métodoresult()
. Luego, el resultado se agrega a la listaresults
.Ten en cuenta que utilizamos la llamada al método
.<><buffer>>composite()
para hacer un casting del futuro compuesto aList<><buffer>>
, ya que el métodocomposite()
devuelve unList<><?>>
.