Вызов генератора можно использовать везде, где можно использовать итератор:
Генераторы можно использовать в цикле 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: