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
   193   194   195   196   197   198   199   200   201   202   203