我遇到了一个问题,Intellij向我警告在本地捕获的异常“抛出” 。在仔细研究为什么不行之后,这是有道理的,不应将错误用于流量控制。我面临的问题虽然是异步的,但我不能不在本地扔东西而拒绝诺言,我会得到警告。
我的一些示例代码。
顶层接受请求并等待控制器的响应:
Router.post("/", async (req, res) => {
try {
let itemController = new ItemController(req.body);
let response = await itemController.request();
res.send(response);
} catch (error) {
res.status(500).send({ error: error});
}
});
控制器接收请求并等待其他功能以获取一些数据。
async request() {
try {
await isValidItem();
return await this.initialize();
} catch(error) {
throw error;
}
}
然后我有一个获取该产品制造商ID的函数,我遇到了问题。如果SQL查询没有失败并且响应中没有任何内容,则需要抛出本地错误,以便请求可以正常失败。并向客户端发送适当的500错误。
async queryManufacturerID() {
try {
let result = await this.queryManufacturerID(this.itemID, this.brand);
if (result === false) {
throw new Error("this item has no manufacturer ID");
} else {
this.manufacturerID = result["manufacturerItemID"];
}
} catch (error) {
throw error;
}
}
我的问题是我知道我可以调整它,以便其他得到此答复的函数可以知道此函数失败而没有错误,但是这必须在整个链中进行以防止在本地抛出。似乎很肿。
答案 0 :(得分:0)
唯一使此代码过大且IDE抱怨的不是抛出错误,而是:
try {
//...
} catch (error) {
throw error;
}
没有操作。您可以安全地删除它,而无需更改逻辑。
唯一应使用catch
的情况是您实际计划处理错误并使执行重新回到正轨的情况。
仔细研究为什么不行是合理的之后,不应将错误用于流量控制
我不同意。错误是适当的流控制的一部分,它们使您可以处理计划外的事情。在这种情况下,如果发生意外情况也可以抛出错误。