简单叙述一下generator用法
function*
关键字可以在表达式内部定义一个生成器函数。
function* foo() {
yield 'a';
yield 'b';
yield 'c';
}
let str = '';
for (const val of foo()) {
str = str + val;
}
console.log(str); // "abc"
yiled关键字用来暂停一个生成器函数
function *play(num) {
let index = num || 0;
while(index < num + 2){
yield ++index
}
return 10
}
let count = play(5);
console.log(count.next()); // {value: 6, done: false}
console.log(count.next()); // {value: 7, done: false}
console.log(count.next()); // {value: 10, done: true} 结束
yield*
表达式用于委托给另一个generator
或可迭代对象
function *play(num) {
let index = num || 0;
while(index < num + 2){
yield ++index
}
return 10
}
function *pause(num) {
yield* play(num)
}
let p = pause(5);
console.log(p.next()); // {value: 6, done: false}
console.log(p.next()); // {value: 7, done: false}
console.log(p.next()); // {value: undefined, done: true}
或
function* g3() {
yield* [1, 2];
yield* "34";
yield* arguments;
}
var iterator = g3(5, 6);
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: "3", done: false}
console.log(iterator.next()); // {value: "4", done: false}
console.log(iterator.next()); // {value: 5, done: false}
console.log(iterator.next()); // {value: 6, done: false}
yield*
是一个表达式,不是语句,所以它会有自己的值。
function *play() {
yield * [];
return 10
}
var pause = play();
console.log(pause.next()); // {value: 10, done: true}