Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

198
Vistas
Ignorar la llamada asíncrona anterior y ejecutar la última

Estoy usando Reaccionar,

Tengo un botón que llama a una función asíncrona en cada evento onClick:

 <MyButton onClick={handleClick}> Next </MyButton>

Luego una función que tarda en cargar datos:

 const isExecuting = useRef(false); const handleClick = async () => { if (!isExecuting.current) { isExecuting.current = true; try { resetViews(); await chargeViews(patientId); } finally { isExecuting.current = false; } } };

Entonces, por ejemplo, cuando hago clic 5 veces, recibirá 5 llamadas y todas se ejecutarán en orden, necesito una forma de ejecutar la última llamada e ignorar las 4 llamadas anteriores, por lo que no tomará tiempo para ejecutar todos ellos.

PD: Pensé en deshabilitar el botón hasta que la función termine de ejecutarse, pero como estoy usando el botón para cargar al siguiente patient , esto no será conveniente porque estaríamos obligados a esperar a que carguen 4 pacientes para cargar el quinto paciente.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debounce es una opción y la opción es pasar ref y obtener cancelToken cuando intente presionar nuevamente la misma API, cancelará la llamada anterior. Si existe y llama a la nueva solicitud de API, el siguiente ejemplo es la solución general o puede enviar cancelToken del componente y llámelo antes de la nueva llamada API

 // dummy Api const chargeViews = async (sourceRef,patientId) => { console.log({patientId}) try { let token = undefined; if (sourceRef) { const CancelToken = axios.CancelToken; const source = CancelToken.source(); token = { cancelToken: source.token }; sourceRef.current = source; } const response = await Axios.get(`endpointURL`, token) return response.data; // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (err: any) { throw new Error(err); } };

componente

 const sourceRef = React.useRef(null); const handleClick = async () => { try { if (sourceRef.current) sourceRef.current.cancel(); await chargeViews(sourceRef, patientId); } catch (error) { console.log(error) } }; <MyButton onClick={handleClick}> Next </MyButton>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda