NG.*_*NG. 4 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.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'});
}
})
Run Code Online (Sandbox Code Playgroud)
和userManager:
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;
Run Code Online (Sandbox Code Playgroud)
我的问题是:路由中的try catch块会捕获addUser中抛出的所有错误,还是只捕获user.save()抛出的那些,因为那是返回的?
答案是肯定的,它将捕获try块内和所有内部函数调用中的所有错误.
async/await只是承诺的语法糖.因此,如果使用promises可以做某事,那么也可以使用async/await.
例如,以下两个代码段都是等效的:
使用承诺:
function bar() {
return Promise.reject(new Error('Uh oh!'));
}
function foo() {
return bar();
}
function main() {
return foo().catch(e => {
console.error(`Something went wrong: ${e.message}`);
});
}
main();Run Code Online (Sandbox Code Playgroud)
使用async/await:
async function bar() {
throw new Error('Uh oh!');
}
async function foo() {
await bar();
}
async function main() {
try {
await foo();
}
catch(e) {
console.error(`Something went wrong: ${e.message}`);
}
}
main();Run Code Online (Sandbox Code Playgroud)
实际上,由于您不使用await,因此您的代码将无法运行userManager.addUser.
它还会强制您async在父函数上使用,这可能会破坏它.检查快速文档(或者只是尝试它是否有效).
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'});
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7449 次 |
| 最近记录: |