У меня проблема с тем, что Intellij предупреждает меня о 'throw' исключении, пойманном локально . После некоторого выяснения, почему это не нормально, это имеет смысл, ошибки не должны использоваться для управления потоком. Однако проблема, с которой я сталкиваюсь, заключается в асинхронности. Я не могу отклонить обещание, не бросив что-то локально, и я получаю предупреждение.
Некоторые из моих примеров кода.
Верхний уровень принимает запрос и ожидает ответа от контроллера:
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;
}
}
Тогда у меня есть функция, которая получает идентификатор производителя для этого элемента, и я сталкиваюсь с моей проблемой. Если 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;
}
}
Моя проблема в том, что я знаю, что могу настроить это так, чтобы другие функции, которые получают ответ от этого, могли знать, что эта функция завершилась с ошибкой без ошибки, но это должно было произойти во всей этой цепочке, чтобы предотвратить локальный выброс. Похоже, много раздувать.