假设node.js LTS并使用async等待,中断执行的正确方法是什么?我将显示一个承诺版本和一个异步/等待版本来演示该问题-
例如,在异步/等待版本中,如果从checkUserRouteRequirements
引发错误,并且{API发出了403
,则Express继续执行代码并尝试res.json(result);
。 / p>
我宁愿将.catch
放在validateRoute
方法中以实现可重用性,因为可能有数百条路由,并且当然没有尝试两次发送标头的错误。
router.get('/', async (req, res, next) => {
await validateRoute(roles.Approved, req, res, next);
// await does not break code execution
const result = await channelsService.getAll();
return res.json(result);
});
async function validateRoute(role, req, res, next) {
return checkUserRouteRequirements(req.user.sub, role).catch(error => {
res.status(403).json({});
});
}
router.get('/', (req, res, next) => {
validateRoute(roles.Approved, req, res, next).then(() => {
channelsService.getAll().then(result => { return res.json(result) });
});
});
function validateRoute(role, req, res, next) {
return checkUserRouteRequirements(req.user.sub, role).catch(error => {
res.status(403).json({});
});
}
我也不喜欢在任何地方都尝试/捕获并抛出必须捕获的错误。
任何建议表示赞赏!