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

только  одно событие - выполнение или  отклонение  (в  настоящее время в  нашей
       функции нет ветки для реализации отклонения).

       Использ    о в а н и  е обязательств
          Давайте посмотрим, как мы можем использовать свою функцию countdown. Мы
       могли бы только вызвать ее и проигнорировать обязательство вообще: countdown ( 5) .
       В результате мы также получим свой обратный отсчет и можем не возиться с обяза­
       тельствами вообще. Но что если необходимо воспользоваться преимуществами обя­
       зательств? Вот как мы используем возвращаемое обязательство.
       countdown ( 5 )   . t hen (
           function  )    {
                   (
               соnsоlе . l оg ( "Обратный  отчет  заверше " ) ;
                                                н
           } ,
                   (
           function  e rr)  {
                                                                     e
               console . l og ( " Oшибкa  при  обратном  отсчете :  "  +    err . m essag ) ;
       ) ;
          В этом примере мы не потрудились присвоить возвращенное обязательство пере­
       менной; мы просто  вызвали его (метод then) обработчик непосредственно.  Этому
       обработчику передается две функции обратного вызова: первая вызывается при вы­
       полнении обязательства (т.е. при нормальном завершении), а вторая - при его от­
       клонении (т.е. при возникновении ошибки). Причем вызвана будет только одна из
       этих функций. Обязательства поддерживают также обработчик catch. Таким обра­
       зом, вы можете разделить эти два обработчика (мы также сохранили обязательство
       в переменной, чтобы продемонстрировать это).
       con t   р  =  countdown ( 5 ) ;
          s
       p  . t hen ( f unction ( )    {
                                            н
           соnsоlе . l оg ( " Обратный  отчет  заверше " ) ;
       } ) ;
       p . catch ( f unction ( e r r )    {
           console . log ( "Oшибкa  при  обратном  отсчете :  "  +    err . m essage ) ;
       } ) ;
          Давайте изменим нашу функцию countdown так,  чтобы  создать условие для воз­
       никновения ошибки. Предположим, что мы суеверны и считаем ошибкой случай,
       если при счете встретится число 1 3 .
       function  countdown ( s econds )  {
           return  new  Promise ( f unction ( r esolve ,  rej ect )  {
               for ( l e t   i=seconds ;  i>=O ;  i--)  {
                   setTimeout ( function ( )   {
                            =
                      i f ( i == l З )   return  rej ect ( n ew  Еrrоr ( "Принципиально  это  не
             м
       считае ! " ) )  ;
       240     Глава 1 4 . Асинхронное программирование
   232   233   234   235   236   237   238   239   240   241   242