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

297
Vistas
Tiempo de espera de conexión de Axios

Veo muchas respuestas y ninguna me funciona. Estoy implementando un código de reintento en el navegador, donde si la API no ha respondido en 4000ms , vuelve a intentarlo.

El problema es que quiero hacer esto para las solicitudes POST que no son idempotentes, y el estado de respuesta en las herramientas de desarrollo de Chrome (si tiene éxito o falla) NO coincide con axios o mi lógica implementada de cuándo se agota el tiempo de espera.

Esto da como resultado que las solicitudes POST llamen dos veces con éxito en el servidor a pesar de que la conexión arroja un error dentro de mi código axios. Es una condición de carrera en alguna parte, supongo que el tiempo entre las conexiones de axios y cuándo puede establecer el resultado de la respuesta.

Probé el tiempo de timeout de axios predeterminado que no funciona, ya que es un tiempo de espera de respuesta.

También intenté implementar un tiempo de espera de conexión y sigo encontrando el mismo problema.

El problema comienza a ocurrir si configuro el connTimeout para que esté justo en el estadio de béisbol de cuánto tiempo tarda el servidor en responder en promedio, +/- unos pocos ms . Siento que cuando se cancela una solicitud, de alguna manera no se verifica si la conexión realmente tuvo éxito o no antes de intentar cancelar.

Lo haría yo mismo (antes de llamar a source.cancel() , pero no estoy seguro de qué puedo leer para obtener el estado. Lo único que veo es una promesa sin resolver)

 const makeRequest = async (args, connTimeout, responseTimeout) => { const source = axios.CancelToken.source(); const argsWithToken = { ...args, cancelToken: source.token, }; const api = buildAxios(responseTimeout); const timeout = setTimeout(source.cancel, connTimeout); return api(argsWithToken).then(result => { clearTimeout(timeout); return result; }); }; const handleRetries = (args, maxRetries) => ( new Promise(async (resolve, reject) => { /* eslint-disable-line */ let retries = 0; let success = false; while (!success && retries < maxRetries) { try { const result = await makeRequest(args, 300, 30000); /* eslint-disable-line */ success = true; resolve(result); } catch (err) { retries += 1; // console.log(`Error making ${args.method} request to ${args.url}, retrying... #${retries}`); } } // line below is included to prevent process leaks if (!success) reject(new Error(`Retried ${retries} times and still failed: ${args.url}`)); }) ); handleRetries({url: '/settings', method: 'get'}, 3)
about 4 years ago · Juan Pablo Isaza
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