UnhandledPromiseRejectionWarning: This error originated either by throwing inside of an async function without a catch block

后端 未结 4 2222
猫巷女王i
猫巷女王i 2020-12-08 19:16

I am getting following error in my Node-Express App

UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by

相关标签:
4条回答
  • 2020-12-08 19:34

    I resolve the problem. It's very simple . if do you checking care the problem may be because the auxiliar variable has whitespace. Why ? I don't know but yus must use the trim() method and will resolve the problem

    0 讨论(0)
  • 2020-12-08 19:37

    I suggest removing the below code from getMails

     .catch(error => { throw error})
    

    In your main function you should put await and related code in Try block and also add one catch block where you failure code.


    you function gmaiLHelper.getEmails should return a promise which has reject and resolve in it.

    Now while calling and using await put that in try catch block(remove the .catch) as below.

    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
    })
    
    0 讨论(0)
  • 2020-12-08 19:47

    .catch(error => { throw error}) is a no-op. It results in unhandled rejection in route handler.

    As explained in this answer, Express doesn't support promises, all rejections should be handled manually:

    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);
      }
    })
    
    0 讨论(0)
  • 2020-12-08 19:47

    You are catching the error but then you are re throwing it. You should try and handle it more gracefully, otherwise your user is going to see 500, internal server, errors.

    You may want to send back a response telling the user what went wrong as well as logging the error on your server.

    I am not sure exactly what errors the request might return, you may want to return something like.

    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);
        })
    
    })
    

    This code will need to be adapted to match the errors that you get from the axios call.

    I have also converted the code to use the try and catch syntax since you are already using async.

    0 讨论(0)
提交回复
热议问题