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

i
               const  countdown  =  th s ;
               const  timeoutids  =  [ ] ;
               return  new  Promise ( function ( r esolve ,  rej ect )  {
                   for ( l et  i=countdown . s econds ;  i>=O ;  i - - )    {
                      t i meout ids . p ush ( setTimeout ( function ( )    {
                                                          =
                          i f ( countdown . s uperstitious  &&  i== l З )
                              / /   очистить  все  о ж идающие  об р аботки  периоды
                                    t
                              t i meou i ds . forEach ( clearTimeout )  ;
                              return  rej ect (new  Еrrоr ( " Принципиально  это  не
       считае ! " ) )  ;
             м
                          countdown . e mit ( ' t ic ' ,  i ) ;
                                             k
                          i f ( i == O )   resolve ( ) ;
                                =
                       } ,  ( c ountdown . seconds-i ) * 1 0 0 0 ) ) ;
               }  ) ;





       Сцепл е н и е   обязательств
          Одно из преимуществ обязательств в том, что они могут быть сцетzены (chained),
       т.е. когда одно обязательство выполняется, вы можете немедленно вызвать другую
       функцию,  которая  возвращает обязательство".  и  т.д.  Давайте создадим функцию
       launch, которую мы можем сцепить с обратным отсчетом.
       function  launch ( )    {
           return  new  Promise ( f unction ( r esolve ,  rej ect )  {
                                 и
               console . l og ( "Пoexaл ! " ) ;
               setTimeout ( f unction ( )    {
                   resolve ( " Ha  орбите ! " ) ;
               } ,   2 * 1 0 0 0 ) ;     / /  действительно  очень  быстрая  ракета
           } )   ;

          Сцепить эту функцию с обратным отсчетом довольно просто.

       const  с  =  new  Countdown ( 5 )
           . o n  ( ' t ic ' ,  i  =>  console . l og ( i   +  '  .  .  .    ) ' )  ;
                   k
       c . g o  )
           (
           . then  l aunch)
                (
           . t hen ( function (msg)
                            g
               console . l og (ms ) ;
           } )
           . c atch ( f unction ( e rr)  {

               console . e rror ( "Xьюcтoн,  у  нас  проблемы  . .  .  . " ) ;
           } )

       244     Глава 1 4 . Асинхронное программирование
   236   237   238   239   240   241   242   243   244   245   246