迭代生成器,它返回一个Generator

时间:2016-11-07 18:44:19

标签: javascript loops generator

我尝试了解发电机,但我找到了一个我无法遵循的例子。



// First Generator

function* Colors ()
{
  yield "blue";
  yield* MoreColors ();
  yield "green";
 }

// Generator refered by the first Generator
function* MoreColors ()
{
  yield "yellow";
  yield "orange";
 }


// Let us iterate over the first Generator

const colorIterator = Colors();

let color;

while (!(color = colorIterator.next()).done)
{
  console.log(color.value);
}




输出为: "蓝色" "黄色" "橙" "绿色"

我预计: "蓝色" "黄色" "橙"

为什么我期待这个: 我认为在返回 orange 之后, MoreColors()在迭代器上调用 .next()方法。这应返回属性 .done 的属性值为 true 的对象。 这样, item 等于 true ,而while循环应该停止。

显然,我的期望是错误的。

如果有人能指出我的错误,我会很高兴。

1 个答案:

答案 0 :(得分:1)

问题是一旦MoreColors停止,生成器颜色就不会停止。在完成MoreColors之后,Colors的执行从它停止的地方继续,因此它在完成之前将返回“green”。那是因为生成器不会“变成”MoreColors,而是返回它的答案,并且仍然会在Colors上调用.next()方法。