Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Veamos como implementaríamos esto en ambas partes.

Frontend

Después de la primera petición, con la que obtendremos el id de solicitud, para hacer pooling podemos hacerlo de la siguiente manera:

Bloque de código
languagejs
obtenerResolucion(numSolicitud) {
  // Llamada al método REST para obtener los datos
  ServicioRest.obtenerResolucion(numSolicitud, this.token)
    .then((response) => {
      if(response.status === 202){
        // Si no están listos los datos esperamos para volver a hacer la petición, en este caso 5000ms, 5s, le ponemos tiempo de espera que queramos
        setTimeout(()=>{this.obtenerResolucion(numSolicitud)}, 5000);
      } else {
        // Procesamiento de los datos ya obtenidos
        ...
      }
    })
    // Si se produce un error lo indicamos con un toast
    .catch(() => {
      this.$store.dispatch("global/setShowSpinner", false); // Quitamos el spinner de carga - Hay que adaptarlo a cómo lo hagamos en nuestra aplicacion
      this.$toast.add({
        severity: "error",
        summary: "Error",
        detail: "Se ha producido un error en el proceso.",
        life: 3000,
      });
    });
},

Backend

Para ejecutar código de forma asíncrona en Spring Boot, podemos utilizar CompletableFuture.runAsync( ... ), y con esto el método que inicia la solicitud tendría esta estructura:

Bloque de código
languagejava
public ResponseEntity<String> solicitudDatos( ... ) {
	// Inicia proceso y obtiene id
    String id = iniciaProceso() //Función que cree el registro en base de datos y devuelva el id
	CompletableFuture.runAsync( () -> {
		// Código asíncrono, que termine poniendo el resultado en base de datos
	});
    // Devolvemos el id de la peticion
	return new ResponseEntity<>ResponseEntity.ok(id, HttpStatus.OK );
}

Y para el método al que el front estará haciendo pooling solo necesitaremos una consulta normal a base de datos, con un JpaRepository, y comprobar si el campo de los datos está vacío o no, dando la respuesta correspondiente.