Vertx - Futuro.compose
1. Future en vertx es diferente del nativo de Java. Ambos tienen la capacidad de encapsular resultados. Sin embargo, en vertx, para evitar que la espera bloquee el hilo del bucle de eventos, lo que resulta en el problema de no poder hacerlo. responder a tiempo. Este problema se puede resolver definiendo el controlador de devolución de llamada en el futuro.
Demostración 1:
Demostración 1 Explicación:
1. Defina un Futuro cuyo tipo de resultado sea Cadena. Establezca una devolución de llamada para este futuro.
3. Llame al método asincrónico y pase Future como parámetro
4. complete() encapsula el resultado de la llamada en Future y devuelve Future con el estado completado.
5. Finalmente, ejecute la función de devolución de llamada para procesar el resultado de la llamada.
Lo que necesitas saber:
La T en Futurelt;Tgt; representa el tipo de resultado devuelto.
Handlerlt; AsyncResultlt; Tgt; gt; es el controlador del resultado de la llamada.
2. Comprenda la compilación, que es un enfoque encadenado para lidiar con el infierno de las devoluciones de llamadas.
La primera forma de escribir componer:
Pasar parámetros
1. Llame al controlador futuro de este método de redacción,
2 strong> Idea:
1. Ejecutar el procesamiento de devolución de llamada del futuro llamado por compose,
2. Si hay un error en el procesamiento de devolución de llamada del futuro actual, el siguiente. Se establecerá el futuro. Si falla,
3. Si no hay ningún error, devuelve el próximo futuro directamente.
Demostración 2:
Explicación de la demostración 2:
1. Definir dos futuros
2. La línea 4 simula la primera vez El asíncrono Se completa la llamada, f1 obtiene el resultado y el estado está completo. 1 es el controlador de f1 y el parámetro 2 es el próximo futuro f2
4. Tenga en cuenta que en el controlador de f1, se simula que se completa la segunda llamada asincrónica y el estado de f2 pasa a ser completo , activando así Handler para f2.
El segundo método de compilación
Componer
Compose es el segundo método de compilación
Componer es el segundo método de compilación. strong>
Ideas:
1. El tipo de parámetro entrante es Functionlt; T, Futurelt;, lo que significa que la función de conversión entrante es el resultado de una llamada de una función futura; convertido al próximo futuro en la cadena.
2. Si la llamada es exitosa, el resultado de la llamada se pasará como parámetro para la ejecución de la función, es decir, "apply = mapper.apply(ar.result());", y el El resultado devuelto será Futurelt;Ugt;.
3. Dado que es necesario juzgar de antemano si el resultado de llamar a ar es exitoso, en Futurelt ret.
4. Devuelve ret;
Esta encapsulación es bastante interesante. En el método Compose, se configura un controlador futuro para la persona que llama. En el controlador, el resultado futuro en ar se pasa al parámetro (función) Compose y luego al método Compose. Se ejecuta la función Finalmente, la función Encapsula el futuro devuelto con el futuro generado internamente por Compose y lo devuelve.
Demostración 3:
Aunque el contenedor de API es un poco más complejo, el proceso es mucho más simple que el primero. También es más fácil de entender.