【发布时间】:2019-11-10 01:19:44
【问题描述】:
我有一个 promise 异步函数,我想知道如何捕获 express/nodejs 中的所有错误
如果 getData1 的 Url 无效,应用程序停止声明 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"));
}
})
}
【问题讨论】:
-
如果您不使用
await,则无需在promise中使用async。您可以添加有问题的错误行吗? -
@AmolBJamkar 感谢回复,如果网址错误jsonplaceholder.typicode.com/todos1`,我想处理异常,但应用程序崩溃
-
你有一个
catch代表getDate1,它看起来不错。但是getData2没有一个,它嵌套在then中。你确定错误不是来自getData2吗?
标签: javascript node.js express promise async-await