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

