alex4answ
@alex4answ

Функция валидации которая выбрасывает исключения?

Доброе утро, есть функция в которой несколько проверок-валидаций.
const myFunc = () => {
  if(..) {
    throw new Error('Exception 1');
  }
  if(..) {
    throw new Error('Exception 2');
  }
  if(..) {
    throw new Error('Exception 3');
  }
  // далее уже, наконец-то, исполнение задачи
};


Эти проверки раздувают функцию, хочется их выделить в отдельную функцию-валидатор, но правильно ли это ?

Просто вызов этой функции будет не совсем информативный, тк она ничего не возвращает:
const myFunc = () => {
  checkCanDoSomething(); // не очень информативно, просто вызов какой-то функции проверки, ничего не возвращает
  // выполнение основной задачи
};


Выглядит странно, ранее очень редко встречал такие конструкции, обычно валидаторы что-то возвращают, либо выбросить исключение.

Как это правильно реализовать?
Вопрос скорее философский, бытовой, простой, я понимаю, но хочется найти этому разумное и красивое решение, чтобы функция была читаема
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
Выглядит странно, ранее очень редко встречал такие конструкции,


вполне себе нормально, assertSomething()
даже в ноде в стандартной либе есть https://nodejs.org/api/assert.html#assert_assert_o...

ваш if (cond) throw 'aaa' превращается в assert(cond, 'aaa'). Наглядно, понятно, в одну строчку. Ну или еще как вам будет удобнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
bingo347
@bingo347 Куратор тега JavaScript
Бородатый программер
Возвращайте Result, Ok при успешной валидации или Err с ошибкой при неудачной, а после соединяете все ошибки и выводите пользователю информацию
При throw приложение падает, Вы конечно можете поймать throw через try-catch, но он приведет Вас к полному хаосу в Вашем коде и нестабильному приложению. А кроме того, нет возможности обработать все валидации за раз, если первая упадет, об остальных юзер узнает только когда исправит данные, как думаете, на какой раз он пошлет Ваше приложение?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 окт. 2020, в 13:40
35000 руб./за проект
21 окт. 2020, в 13:24
700 руб./за проект