One, the generator (generator)
The shape function* () { }
of the function generator function
Two, yield keywords
yield
Keyword should be used with generator- Builder
yield
role similarreturn
, returns anGenerator
object (Generator
essentially a specialIterator
).function* generatorFunc() { let arr = [1, 2]; for(let i=0; i<arr.length; i++){ yield arr[i]; } } let gn = generatorFunc(); gn.next(); // {value: 1, done: false} gn.next(); // {value: 2, done: false} gn.next(); // {value: undefined, done: true} // 或者使用 for...of 遍历生成器
next()
Method to pass value to functionfunction* generatorFunc2(_a) { let x = 2 * (yield _a + 1); console.log(`x的值为:${ x}`); let y = 7 + (yield x) console.log(`y的值为:${ y}`); yield y } let gn = generatorFunc2(5); gn.next(); // {value: 6, done: false} gn.next(5); // {value: 10, done: false} // x的值为:10 gn.next(4); // {value: 11, done: false} // y的值为:11 gn.next(); // {value: undefined, done: true}
- Used in the generator
return
function* generatorFunc3() { let arr = [1, 2]; for(let i=0; i<arr.length; i++){ yield arr[i]; } return 'done'; return 'done2'; } let gn = generatorFunc3(); gn.next(); // {value: 1, done: false} gn.next(); // {value: 2, done: false} gn.next(); // {value: 'done', done: true} gn.next(); // {value: undefined, done: true}