在这个处理 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 错误只是误导并应该被禁用?
原文由 cib 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在检查某些内容并在
isAllowed
失败时抛出异常,但您知道在那种情况下该怎么做 - 调用sendErrorCode
。如果您不知道如何处理这种情况,您应该向外部调用者抛出异常——即在特殊情况下。在这种情况下,您已经定义了发生这种情况时该怎么做的流程 - 只需直接使用它而无需间接抛出/捕获:
相反,如上所述,我希望这是处理这种情况的方法。