在Node.js中使用async/await正确处理错误
我在Node.js express应用程序中有以下代码:在Node.js中使用async/await正确处理错误,node.js,promise,async-await,Node.js,Promise,Async Await,我在Node.js express应用程序中有以下代码: router.route('/user') .post(async function(req, res) { if(req.body.password === req.body.passwordConfirm) { try { var response = await userManager.addUser(req.body); res
router.route('/user')
.post(async function(req, res) {
if(req.body.password === req.body.passwordConfirm) {
try {
var response = await userManager.addUser(req.body);
res.status(201).send();
} catch(err) {
logger.error('POST /user failed with error: '+err);
res.status(500).send({err:"something went wrong.."});
}
} else {
res.status(400).send({err:'passwords do not match'});
}
})
和用户管理器:
var userManager = function() {
this.addUser = async function(userobject) {
userobject.password_hash = await genHash(userobject.password_hash);
var user = new User(userobject);
return await user.save();
};
};
module.exports = userManager;
我的问题是:路由中的try-catch块将捕获addUser中抛出的所有错误,还是只捕获user.save()抛出的错误,因为这是返回的错误?答案是肯定的,它将捕获
try
块内和所有内部函数调用中的所有错误
async/await
只是承诺的语法糖。因此,如果可以使用承诺,那么也可以使用async/await
例如,以下两个代码段是等效的:
使用承诺:
功能条(){
返回承诺。拒绝(新错误('Uh-oh!'));
}
函数foo(){
返回杆();
}
函数main(){
return foo().catch(e=>{
错误(`Something出错:${e.message}`);
});
}
main()
addUser
是一个异步函数
,因此从不引发异常。它只会返回一个可能会被拒绝的承诺。只有当你等待
你的添加用户
呼叫时……啊,捕捉得好,我忘了在那里添加它了!但是OP在try
块中不使用wait
?!