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

т
           const  color  =  yield  "Какой  ваш  любимый  цве ? " ;
           return  ' У    $  { n ame }  любимый  цвет  $  { c o l o r } .  '  ;
          Вызывая этот генератор, мы получаем итератор, но никакая часть генератора еще
       не была выполнена.  Когда происходит вызов метода next, он пытается выполнить
       первую строку. Но поскольку в этой строке содержится выражение yield, генератор
       должен возвратить управление вызывающей стороне. Вызывающая сторона должна
       снова вызвать метод next, прежде чем первая строка будет выполнена и переменной
       name будет присвоено значение, которое было передано в next. Вот как это будет вы­
       глядеть, когда мы запустим этот генератор до конца.
       const  it  =  interrogate ( ) ;
                                                 т
                                                        n
       i t . next ( ) ;    / /   {  value:  "Как  вас  зову ? " ,   do e :   false }
                                                               n
        t
              (
       i  .   next  ' Кол ' )  ;     / /  {  value:  "Какой  ваш  любимый  цвет? "   1  do e :   false  }
                   я
       i t . n ехt ( ' оранжев ый  ' ) ;    / /   {  va u e :    "У  Коля  любимый  цвет  оранжевый.  " ,  don :   true }
                                   l
                                                                          e
          Последовательность  событий  при выполнении  этого  генератора представлена
       на рис. 12.1 .
       1 .   Генератор  запущен  и  ожидает;  возвращается  итератор .
       function*  interrogate ( )    {                     const  it   interrogate ( ) ;
                                       т
           const  narne  =  yield  ' К ак  вас  зову ? ' ;
           const  color  =  yield  ' К акой  ваш  любимый  цвет? ' ;
           return  ' у    $ { n arne }  любимый  цвет  $  ( color} . ' ;
       2  .   narne=undef i ned;  возвращается  строка  ' К ак  вас  зовут? ' ;   генератор  ожидает .
       function*  interrogate ( )   {
                                                                t
           const  narne  =  yield  ' К ак  вас  зовут? ' ;    it . n ex ( ) ;
           const  color  =  yield  ' К акой  ваш  любимый  цвет? ' ;
           return  'у  $ ( narne}  любимый  цвет  $ { c olo } . ' ;
                                           r

                                                          т
                  я
       З  .   nаmе= ' К ол " ;  возвращается  строка  " К акой  ваш  любимый  цве ? ' ;  генератор  ожидает .
       function*  interrogate ( )    {
           const  ·narne   =·  yield  ' К ак  вас  зовут? ' ;
                                                            t
           const  color  =  yield  ' К акой  ваш  любимый  цвет? ' ;    � i  .   next  ' Кол ' )  ;
                                                                 (
                                                                     я
           return  'у  $ { narne }  любимый  цвет  $ ( colo } . '  ;
                                           r
       4  .    соlоr= ' о ранжевый' ;   возвращается  строка  'У  Коля  любимый  цвет  оранжевый . '  ;
           генератор  завершает  работу .
       function*  interrogate ( )
           const  narne  =  yield  ' К ак  вас  зовут? ' ;
                             '
           const  color  =  yield/ K aкoй  ваш  лЮбииый  цвет? ' ;    1111(   1
           return  'у  $ ( n arne }  любимый  цвет  $ { c olor } . ' ;    ---i•- i t   . п ехt (  ' оранжевый·  • )  ;
                             Рис. 12.1 :   П р имер работы генератора


                                                                   Ге н ераторы   2 1 1
   204   205   206   207   208   209   210   211   212   213   214