В этой функции, которая обрабатывает вызов 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 просто ошибочна и должна быть отключена?