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

119
Vistas
Detener la ejecución de la función de devolución de llamada del enrutador expreso en el tiempo de espera

Necesito definir un tiempo de espera para rutas específicas en Express para que, en lugar de obtener un error de tiempo de espera predeterminado del servidor, mi API devuelva datos JSON. Lo agrego así al comienzo del enrutador. Obtenga la función de devolución de llamada

 router.get('/', function (req, res, next) { res.setTimeout(10000, function () { res.status(500).json({ error: 'Response Processing Timed Out.' }); }); /* some time-consuming code here */ res.json(result); //this should never happen if timeout occurs });

y eso (parte del tiempo de espera) funciona bien (devuelve un mensaje de error JSON al cliente en el tiempo de espera, como se esperaba).

El problema es que el resto del código aún se ejecuta y cuando llega al método res.json regular - res.json(result) aparece el error ERR_HTTP_HEADERS_SENT (como debería ser, porque intenta hacer otro res.json después de que ya se haya enviado el que contiene el mensaje de error)

Si esa fuera una verificación ordinaria de errores, agregaría una declaración de devolución después de res.json, pero no lo está: está dentro de una función de devolución de llamada y una devolución simplemente finalizaría la devolución de llamada, pero no la función principal (en este caso, el enrutador. obtener la función de devolución de llamada). Sé que podría establecer alguna variable en verdadero cuando se agote el tiempo de espera y luego verificar si es verdadero antes de cualquier res.json, pero me gustaría evitar eso (tengo bastantes líneas res.json en la función, y también Me gustaría evitar ejecutar un código que consume mucho tiempo si el mensaje de error ya se envió)

¿Alguna idea sobre cómo resolver esto? Si res.setTimeout no es la forma correcta, estaré encantado de aprender la forma correcta de hacerlo.

Gracias

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