Page 198 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 198
const validatedEmail = validateEm i l ( e mail ) ;
a
(
if v alidatedEmail instanceof Error ) {
console . e rror ( ' Oшибкa : $ { validatedEmail . m essage } ) ;
else {
a
i
соnsоlе . l о ( ' Корректный em i l : $ { validatedEma l } ' ) ;
g
catch ( e rr) {
console . e rror ( ' Oшибкa : $ { e rr . m essag } ' ) ;
e
Поскольку мы перехватываем ошибку, наша программа не будет аварийно завер
шать работу. В данном случае в обработчике ошибок мы просто выводим соответ
ствующее сообщение и продолжаем работу. Однако что делать, если для продолже
ния работы программы требуется правильный адрес электронной почты? Очевидно,
что в таком случае нужно обработать ошибку более изящно и красиво завершить
работу программы.
Обратите внимание, что поток выполнения покидает блок catch, как только про
i
исходит ошибка; т.е. оператор i f , который следует за вызовом validateEma l ( ) , не
будет выполнен. В блоке t ry у вас может быть столько операторов, сколько нужно;
первый из них, который закончится ошибкой, передаст управление блоку catch. Если
никаких ошибок нет, блок catch не выполняется, и программа продолжает работу.
Генерирова н и е оши б к и
.
В нашем предыдущем примере ы использовали оператор t r y . . catch для об
м
работки ошибок, которые возникали в самом движке JavaScript (когда мы пытались
вызвать метод match для чего-то, что не является строкой). Вы можете также сге
нерировать ошибку самостоятельно, чтобы задействовать механизм обработки ис
ключений.
В отличие от других языков с обработкой исключений, в JavaScript при генерации
ошибки вы можете использовать любое значение: число, строку или любой другой
тип. Однако обычно оператору throw передают экземпляр объекта Error. Большин
E
ство блоков catch ожидает экземпляра объекта r ror. Имейте в виду, что вы не
всегда можете контролировать, где будет обработана сгенерированная вами ошибка
(функции, которые вы пишете, могут быть использованы другими программистами,
вполне резонно ожидающими, что в процессе генерации ошибки оператору throw
передается экземпляр объекта Error).
Например, создавая приложение по оплате счетов для банка, вы могли бы генери
ровать исключения, если остаток на счете не покрывает платеж (это действительно
исключительный случай, поскольку проверка на такую ситуацию должна осущест
вляться прежде, чем начнется оплата по счету).
Генерирование ошибки 199

