当生成器引用另一个生成器时,是否有一种方法可以使引用的生成器g1()
只迭代并在调用yield* g1()
时生成一个值?而不是在g1()
时迭代yield* g1()
的所有值。
例如.... 而不是:
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
yield* g1();
yield 5;
}
var iterator = g2();
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 }
这样做:
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
yield* g1();
//notice I am calling it a second time for value 3
yield* g1();
yield 5;
}
var iterator = g2();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
//notice value 4 is missing
console.log(iterator.next()); // { value: 5, done: false }
答案 0 :(得分:2)
没有。 yield*
委托其他生成器产生的所有值。
如果您想要更精细的控制,您应该手动迭代它。
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
var it = g1();
yield it.next().value;
yield it.next().value;
yield 5;
}
var iterator = g2();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
//notice value 4 is missing
console.log(iterator.next()); // { value: 5, done: false }