Как решить слишком много попыток поймать в Typescript?

Опубликовано: 4 Января, 2023

В этой статье мы попытаемся увидеть, как мы на самом деле пишем слишком много блоков try/catch для перехвата нескольких ошибок в TypeScript, и далее мы попытаемся понять, с помощью какой техники мы можем уменьшить накладные расходы на написание слишком большого количества try. /catch с помощью определенных примеров кода. Оператор try-catch содержит блок try с блоком catch или блоком finally или оба блока. Блок try будет выполняться первым, блок catch будет выполняться только в случае возникновения исключения. Последний блок всегда выполняется перед выходом из потока управления всего кода.

Необходимость блоков try/catch:

  • Проще говоря, нам нужны блоки try/catch, чтобы перехватывать все ошибки, которые мы получаем от разных функций.
  • Отлов этих ошибок повышает производительность нашего кода и, следовательно, его читабельность.
  • Требуется несколько блоков try/catch, чтобы перехватывать несколько ошибок из нескольких функций одну за другой.

Синтаксис:

try {
    // Here we will all those variables or methods...
    // which tends to cause error or exception laterwards...
}

catch(error_variable){
    // do something with the error_variable...
    // either handle it or print it as per need...
}
...
// Many more such blocks could be added as per need....

Давайте посмотрим на следующие иллюстрации, которые помогут нам понять, сколько блоков try/catch может быть создано слишком много, а также увидеть лучшую версию вместо слишком большого количества блоков try/catch.

Пример 1: в этом примере мы создадим несколько блоков try/catch, чтобы перехватывать несколько ошибок из разных функций, которые на самом деле выдают разные ошибки по отдельности, и в конце мы попытаемся напечатать эти сообщения об ошибках одно за другим.

Javascript




let first_function = (content: string): any => {
    throw new Error(content);
}
  
let second_function = (content: string): any => {
    throw new Error(content);
}
  
let third_function = (content: string): any => {
    throw new Error(content);
}
  
let main_function = (): any => {
    try {
        let result = first_function(
            "Error 404 !!....");
        console.log(result);
    }
    catch (error) {
        console.log(error.message)
    }
  
    try {
        let result = second_function(
            "Something went wrong!!....");
        console.log(result);
    }
    catch (error) {
        console.log(error.message)
    }
  
    try {
        let result = third_function(
            "Please try again later!!....");
        console.log(result);
    }
    catch (error) {
        console.log(error.message)
    }
}
main_function();

Выход:

Error 404 !!....
Something went wrong!!....
Please try again later!!....

В приведенном выше примере добавление нескольких блоков try/catch на самом деле делает код больше, а его читабельность также в некоторой степени снижается, что любой пользователь не хочет выбирать.

Теперь в другом примере мы попытаемся понять другой возможный способ, чтобы поймать ошибки, выброшенные несколькими функциями, без использования нескольких блоков try/catch, например, анализируя другой выход, чтобы уменьшить накладные расходы на несколько попыток/поймать. блоки. Здесь мы будем использовать концепцию callback-функции (функция, которая передается внутри другой функции в качестве аргумента, которая затем выполняется после завершения первой функции, которая сама является основной функцией). Мы будем использовать функцию обратного вызова, которая отвечает за перехват ошибок, выдаваемых каждым методом внутри блока try, который будет объявлен внутри функции-оболочки (также называемой вспомогательной функцией), с помощью которой мы будем перехватывать все ошибки всех функций, одну за другой. еще один.

Пример 2. В этом примере мы будем использовать функцию обратного вызова с блоками try/catch для обработки выброшенного исключения.

Javascript




let first_function = (content: string): any => {
    throw new Error(content);
};
  
let second_function = (content: string): any => {
    throw new Error(content);
};
  
let third_function = (content: string): any => {
    throw new Error(content);
};
  
let catchAllErrors = (callback: any, content: string): any => {
    try {
        callback(content);
    } catch (error) {
        return error;
    }
};
  
let main_function = () => {
  
    let error_1 = catchAllErrors(first_function,
        "Error 404!!...");
    let error_2 = catchAllErrors(second_function,
        "Something went wrong!!...");
    let error_3 = catchAllErrors(third_function,
        "Please try again later!!....");
  
    console.log("First Error: " + error_1);
    console.log("Second Error: " + error_2);
    console.log("Third Error: " + error_3);
};
main_function();

Выход:

First Error: Error: Error 404!!...
Second Error: Error: Something went wrong!!...
Third Error: Error: Please try again later!!....