Вызов генератора можно использовать везде, где можно использовать итератор:
Генераторы можно использовать в цикле for..of
Copy let generator = generateSequence ();
for ( let value of generator) {
console .log (value); // 1, затем 2, затем 3
} При помощи оператора spread можно разложить генератор в последовательность:
Copy let generator = generateSequence ();
let resArray = [ ... generator]; На генераторе можно использовать деструктуризацию:
Copy const [ x , y ] = generateSequence (); Если исполнение генератора добирается до return result, то генератор возвращает значение { value: result, done: true }.
Большинство конструкций с итераторами игнорируют это значение, если done: true
Copy function* genFuncWithReturn () {
yield "a" ;
yield "b" ;
return "The result" ;
}
for ( const x of genFuncWithReturn ()) {
console .log (x);
}
// Output:
// a
// b
const arr = [ ... genFuncWithReturn ()]; // ['a', 'b'] yield*, an operator for making recursive generator calls, does consider values inside done objects. The result of yield* is the end-of-iteration value: