Page 248 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 248

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

       function*  theFutureisNow ( )
                 t
           let  da a ;
           try
               data  =  yield  Promise . a ll  ( [
                   nfcall  f s . readFile ,  ' а  .   tx ' ) ,
                         (
                                           t
                                           t
                   nfcall ( fs . readFil e ,    ' Ь  .   tx ' ) ,
                                           t
                   nfcall ( fs . readFil e ,    ' с  . tx ' ) ,
               ] ) ;
             catch ( e r r )    {
               conso e . error ( "Oшибкa  при  чтении  файлов :  "  +    err . m essag ) ;
                                                                   e
                    l
               throw  err;
           yield  ptimeout ( 6 0 * 1 0 0 0 ) ;
           try  {
                                             t
                                                     [
                                                             [
               yield  nfcall  f s  .   writeFile,  ' d  .   tx ' ,   data  0 ]   +data  1 ]   +data  2 ] ) ;
                           (
                                                                     [
             catch ( e rr)  {
               console . e rror ( " Oшибкa  при  записи  файла :  "  +    err . m essag ) ;
                                                                  e
               throw  err;
          Я  не утверждаю, что обработка исключений с  помощью конструкции  try  . .
                                                                                .
       catch непременно превосходит обработчики catch в обязательствах или функции
       обратного вызова с первым аргументом для передачи ошибки,  но это хорошо по­
       нятый механизм для обработки исключений, и если вы предпочитаете синхронную
       семантику, то можете использовать ее для обработки исключений.


       Заключ    е н и е

          Полное понимание сложностей асинхронного программирования (и различных
       механизмов, выработанных для управления им) критически важно для понимания
       современной разработки на JavaScript. В этой главе мы изучили следующие вопросы.

          •  Управление асинхронным выполнением в JavaScript осуществляется функция­
             ми обратного вызова.

          •  Обязательства не заменяют обратные вызовы;  на самом деле  они  требуют
             функций обратного вызова then и catch.
   243   244   245   246   247   248   249   250   251   252   253