如果我有这样的一行:
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()));
关于javascript - yield *等于javascript中具有普通yield的while循环吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41511400/