如果我有这样的一行:

yield* foo()

我可以将它替换为以下内容吗?
while(true) {
   var x = foo.next();
   if(x.done)
       break;
    yield x;
}

显然,这更冗长,但是我试图了解yield *仅仅是语法糖,还是不清楚我是否有某些语义方面。

最佳答案

代替yield x,您需要做yield x.value。您还需要调用foo以获得迭代器。 .nextfoo生成器返回的迭代器的方法。

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/

10-16 22:39