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

706
Vistas
UnhandledPromiseRejectionWarning: este error se originó al lanzar dentro de una función asíncrona sin un bloque catch

Recibo el siguiente error en mi aplicación Node-Express

UnhandledPromiseRejectionWarning: Rechazo de promesa no controlado. Este error se originó al lanzar dentro de una función asíncrona sin un bloque catch o al rechazar una promesa que no se manejó con .catch(). (id de rechazo: 4)

Por decir lo menos, he creado una función de ayuda que se parece a esto

 const getEmails = (userID, targettedEndpoint, headerAccessToken) => { return axios.get(base_url + userID + targettedEndpoint, { headers: {"Authorization" : `Bearer ${headerAccessToken}`} }) .catch(error => { throw error}) }

y luego estoy importando esta función auxiliar

 const gmaiLHelper = require("./../helper/gmail_helper")

y llamándolo dentro de mi ruta api así

 router.get("/emailfetch", authCheck, async (req, res) => { //listing messages in users mailbox let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) .catch(error => { throw error}) emailFetch = emailFetch.data res.send(emailFetch) })

Por mi parte, creo que estoy manejando el error usando el bloque catch.

Pregunta: ¿Puede alguien explicarme por qué recibo el error y cómo puedo solucionarlo?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

.catch(error => { throw error}) no es operativo. Da como resultado un rechazo no controlado en el controlador de ruta.

Como se explica en esta respuesta , Express no admite promesas, todos los rechazos deben manejarse manualmente:

 router.get("/emailfetch", authCheck, async (req, res, next) => { try { //listing messages in users mailbox let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) emailFetch = emailFetch.data res.send(emailFetch) } catch (err) { next(err); } })
over 4 years ago · Santiago Trujillo Denunciar

0

Sugiero eliminar el siguiente código de getMails

 .catch(error => { throw error})

En su función principal, debe poner espera y el código relacionado en el bloque Try y también agregar un bloque catch donde falla el código.


su función gmailLHelper.getEmails debe devolver una promesa que tiene rechazo y resolución en ella.

Ahora, mientras llama y usa await, coloque eso en el bloque try catch (elimine el .catch) como se muestra a continuación.

 router.get("/emailfetch", authCheck, async (req, res) => { //listing messages in users mailbox try{ let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) } catch (error) { // your catch block code goes here })
over 4 years ago · Santiago Trujillo Denunciar

0

Está detectando el error, pero luego lo vuelve a lanzar. Debe intentar manejarlo con más gracia, de lo contrario, su usuario verá 500, servidor interno, errores.

Es posible que desee enviar una respuesta que le diga al usuario qué salió mal y registrar el error en su servidor.

No estoy seguro exactamente de qué errores podría devolver la solicitud, es posible que desee devolver algo como.

 router.get("/emailfetch", authCheck, async (req, res) => { try { let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) emailFetch = emailFetch.data res.send(emailFetch) } catch(error) { res.status(error.response.status) return res.send(error.message); }) })

Este código deberá adaptarse para que coincida con los errores que obtiene de la llamada axios.

También convertí el código para usar la sintaxis de prueba y captura ya que ya está usando async.

over 4 years ago · Santiago Trujillo 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