在Node.js中使用async/await正确处理错误

在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

我在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.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
?!