如果我有一行这样的行:
yield* foo()
我可以用以下调子代替它吗:
while(true) {
var x = foo.next();
if(x.done)
break;
yield x;
}
显然,这更冗长,但我试图理解 yield* 是否仅仅是句法糖,或者是否有一些我不清楚的语义方面。
而不是yield x
你需要做yield x.value
。您还需要调用 foo
来获取迭代器。 .next
是foo
生成器返回的迭代器的方法。
function *foo() {
yield 1;
yield 2;
yield 3;
}
function *f() {
yield *foo();
}
console.log(Array.from(f()));
function *g() {
var iterator = foo();
while (true) {
var x = iterator.next();
if (x.done) break;
yield x.value;
}
}
console.log(Array.from(g()));