Генераторы в ES6 и рабочий механизм выхода - PullRequest
0 голосов
/ 31 октября 2018
 function* help(){
       const aa = yield 'no_help';
         return aa;
}
const a = help();
a.next()// valid output
a.next('helping hand')// valid output

В документе, который я прочитал, yield полностью потребляет один следующий вызов, поэтому я запутался в том, как мы можем снова вызвать следующий метод, как показано выше, с некоторым значением внутри него

1 Ответ

0 голосов
/ 01 ноября 2018

Используя yield, вы «разбиваете» функцию на несколько частей, которые могут выполняться отдельно (но только по порядку):

 function* help(){
   // part 1starts
   //....
   const aa = yield 'no_help'; // part 1 ends
   // part 2 starts
   // ...
     return aa; // part 2 ends
 }

Если вы звоните a.next(), часть 1 выполняется до тех пор, пока yield и промежуточный результат 'no_help' не будет возвращен вызову. Затем вы вызываете a.next('your helping hand'), который выполнит часть 2, и вы получите обратно то, что возвращает функция. Поскольку нет третьей части, вызов a.next() снова не будет работать.

...