Вопрос проверяет понимание принципа единственной ответственности и избегания дублирования логики обработки ошибок в JavaScript.
Когда разработчик создает helper-функцию для обработки ошибок (например, checkError), предполагается, что эта функция берет на себя ответственность за корректную реакцию на ошибочные ситуации. Если вызывающая функция также содержит свою собственную обработку тех же ошибок, возникает дублирование логики.
function checkError(err) {
if (err.code === 'NETWORK_ERROR') {
console.error('Network issue');
return { status: 'error', message: 'Network failed' };
}
return { status: 'ok' };
}
function fetchData() {
try {
const result = apiCall();
return checkError(result);
} catch (err) {
// Дублирование: та же логика, что и в checkError
if (err.code === 'NETWORK_ERROR') {
console.error('Network issue');
return { status: 'error', message: 'Network failed' };
}
throw err;
}
}В этом примере fetchData сначала вызывает checkError, но затем в блоке catch повторяет ту же самую логику. Это избыточно, так как helper-функция уже обрабатывает ошибку.
Лучше доверить обработку ошибок helper-функции полностью, а вызывающая функция должна только вызывать её и, возможно, добавлять специфичную для своего контекста логику (например, логирование или повторную попытку).
function fetchData() {
try {
const result = apiCall();
return checkError(result);
} catch (err) {
// Только специфичная логика, не дублирующая checkError
logError(err);
throw err;
}
}Дублирование обработки ошибок нарушает принцип единственной ответственности и усложняет поддержку кода. Следует делегировать обработку ошибок специализированным функциям, а вызывающие функции должны добавлять только контекстно-зависимую логику.