Как обработать ошибку, возникающую при попытке доступа к функции или элементу, которых нет в классе JavaScript?

Как можно создать кастомную ошибку при вводе неправильного значения, например "api.{рандомные буквы цифры и тп}", в классе `test` так, чтобы код не завершался, а продолжал выполнение для следующего, корректного запроса?
  • 20 января 2024 г. 16:18
Ответы на вопрос 2
В JavaScript, когда вы пытаетесь обратиться к методу или свойству, которого не существует в объекте (или классе), возникает `TypeError`. Чтобы обработать такую ошибку, вы можете использовать конструкцию `try-catch`. В блоке `try` будет выполняться потенциально опасный код, а в блоке `catch` вы сможете отловить и обработать возникшую ошибку.

Вот пример кода:

```javascript
class Test {
  /* Предполагаем, что класс Test не содержит метода someMethod */

  doSomething() {
    // Логика метода
  }
}

const test = new Test();

try {
  test.someMethod(); // Попытка вызова несуществующего метода
} catch (error) {
  // Error caught
  if (error instanceof TypeError) {
    console.error('Попытка обращения к несуществующему методу или свойству:', error.message);
  } else {
    // Обработка других видов ошибок
    throw error; // Перевыброс ошибки, если это не TypeError
  }
}

console.log('Продолжение выполнения программы после обработки ошибки.');
```

Чтобы создать кастомную ошибку для неправильных значений в классе `Test`, вы можете создать свой класс ошибки, наследуя его от `Error`. Затем вы можете бросать эту ошибку в вашем классе при обнаружении неправильного ввода. Подобно `TypeError`, `catch` в блоке `try-catch` позволит вам обработать кастомную ошибку и продолжить выполнение кода.

```javascript
class InvalidInputError extends Error {
  constructor(message) {
    super(message); // (1) вызываем конструктор базового класса
    this.name = "InvalidInputError"; // (2) задаём имя ошибки
  }
}

class Test {
  api(input) {
    // Проверка, что введено корректное значение (простой пример для демонстрации)
    if (!/^[a-zA-Z0-9]+$/.test(input)) {
      throw new InvalidInputError('Ввод содержит недопустимые символы');
    }
    // Остальная логика метода, если значение корректное
  }
}

const test = new Test();

try {
  test.api('api.некорректное_значение');
} catch (error) {
  // Обработка ошибок
  if (error instanceof InvalidInputError) {
    console.error('Пользовательская ошибка:', error.message);
  } else {
    // Обработка других видов ошибок
    throw error; // Перевыброс ошибки, если это не InvalidInputError
  }
}

console.log('Продолжение выполнения программы после обработки кастомной ошибки.');
```

Используя блок `try-catch`, вы можете обеспечить корректную обработку ошибок и предотвращение аварийного завершения программы при возникновении исключительных условий.
Ну как, через try catch перехватить
Похожие вопросы