简体   繁体   中英

Handle Unhandling Promise Rejection in nodejs express

I have a promise async function, I would like to know how to catch all errors in express/nodejs

If the Url for getData1 is not valid, application stops stating unhandled promise rejection failed to fetch value , how to handle error properly without app crash.

//api.js
var express = require('express');
var router = express.Router();
var helper= require('../help.js');

router.get('/', function (req, res) {
   helper.getData1().then(d1=> {
     helper.getData2().then(d2=> {
       return res.status(200).render("home.ejs", {data1: d1, data2:d2});
     })
   }).
   .catch(err => {
       return res.status(400).send({ error: err.message });
   })
})


//help.js
module.exports.getData1= function () {
  return new Promise(async function (resolve, reject) {
    try {
      url = 'https://jsonplaceholder.typicode.com/todos/';
      request.get({ url }, (err, response, body) => {
        if (!err && response.statusCode==200) {
          resolve(JSON.parse(body));
        }
        else if(response.statusCode>=400 && response.statusCode<=500){
          resolve({ errors: response.statusCode + "Error" });
        }
        else {
          resolve({ errors: response.statusCode + ": Not authorised to access requested data" });
        }
      });
    }
    catch (err) {
      reject(new Error("failed to fetch value"));
    }
  })
}


  module.exports.getData1 = function () {
return new Promise(async function (resolve, reject) {
    url = 'https://jsonplaceholder.typicode.com/todos/';
    await request.get({ url }, (err, response, body) => {
        if (!err && response.statusCode == 200) {
            resolve(JSON.parse(body));
        }
        else if (response.statusCode >= 400 && response.statusCode <= 500) {
            reject(new Error({ errors: response.statusCode + "Error" }));
        }
        else {
            reject(new Error({ errors: response.statusCode + ": Not authorised to access requested data" }));
        }
    })
}).catch((err)=>{
    reject(new Error("failed to fetch value"));//don't understand why a reject here because catch only works when a promise is rejected.
    console.log(err)// or have an explicit error class and assign its properties
    throw new Error(err);
});

}

You can use reject from promises and this gets caught inside the catch section from where you can re-throw this error .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM