Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

691
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!