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

Если  вы уже говорите "Ого." функция, которая возвращает функцию, которая
       возвращает обязательство, которое  вызывает  функцию,  которая  возвращает обя­
       зательство ... У меня уже голова кружится!': я могу вас понять: добавление периода
       в возвращающую обязательство функцию не является тривиальной задачей и требу­
       ет напряжения всех извилин. Полное понимание этой функции является упражнени -
       ем для "продвинутого" читателя. Однако использовать эту функцию весьма просто:
       мы можем добавить период к любой функции, которая возвращает обязательство.
       Скажем, наша самая медленная ракета достигает орбиты через 1 О секунд (разве не
       прекрасны ракетные технологии будущего?). Таким образом, мы устанавливаем пе­
               1
       риод на  1   секунд.
           (
       с .   go  )
           . t hen ( addTimeout ( l aunch,  4 * 1 0 0 0 ) )
           . t hen ( f unction (msg)  {
               console . l og (msg) ;
           }  )
           . c atch ( f unction ( e rr)  (
               console . e rror ( "Xьюcтoн,  у  нас  проблемы:  "  +    err . m essag ) ;
                                                                   e
       } )   ;
          Теперь наша цепь обязательств  всегда  будет завершаться, даже когда функция
       launch ведет себя плохо.


       Генераторы

                                     1
          Как уже обсуждалось в главе  2 , генераторы обеспечивают двухстороннюю связь
       между функцией и ее вызывающей стороной. Г е нераторы синхронны по своей при­
       роде, но, будучи объединены с обязательствами, обеспечивают мощную технологию
       для управления асинхронным кодом в JavaScript.
          Давайте припомним главную сложность асинхронного кода: его труднее писать,
       чем синхронный код. Когда мы решаем задачу, наш ум стремится свести ее к син­
       хронному виду: этап 1, этап 2, этап 3 и т.д. Однако при этом подходе могут быть про­
       блемы производительности, которых нет при асинхронном подходе. Разве не было


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