Обработка необработанного отказа от обещаний в выражении nodejs - PullRequest
0 голосов
/ 28 июня 2019

У меня есть функция обещания асинхронности, я хотел бы знать, как перехватить все ошибки в выражении / nodejs

Если URL-адрес для getData1 недействителен, приложение перестает указывать unhandled promise rejection failed to fetch value, как обработать ошибкуправильно без сбоя приложения.

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


1 Ответ

0 голосов
/ 28 июня 2019
  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);
});

}

Вы можете использовать отклонение от обещаний, и это перехватывается в секции catch, откуда вы можете повторно выдать эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...