最佳答案
在这个处理 REST API 调用的函数中,任何被调用来处理部分请求的函数都可能抛出一个错误,以表明应该将错误代码作为响应发送。但是,函数本身也可能发现错误,此时它应该跳转到异常处理块。
static async handleRequest(req) {
try {
let isAllowed = await checkIfIsAllowed(req);
if (!isAllowed) {
throw new ForbiddenException("You're not allowed to do that.");
}
let result = await doSomething(req); // can also raise exceptions
sendResult(result);
} catch(err) {
sendErrorCode(err);
}
}
Webstorm 将用以下信息在 throw
下面划线: 'throw' of exception caught locally. This inspection reports any instances of JavaScript throw statements whose exceptions are always caught by containing try statements. Using throw statements as a "goto" to change the local flow of control is likely to be confusing.
但是,我不确定如何重构代码来改善这种情况。
我可以复制从 catch
块到 if
检查的代码,但我相信这会使我的代码更难读和维护。
我可以编写一个新函数来检查 isAllowed
,如果不成功就抛出一个异常,但这似乎回避了这个问题,而不是修复 Webstorm 应该报告的设计问题。
我们使用异常的方式很糟糕吗? 这就是我们遇到这个问题的原因,还是说 Webstorm 错误只是误导了我们,应该禁用它?