我尝试了解发电机,但我找到了一个我无法遵循的例子。
// 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循环应该停止。
显然,我的期望是错误的。
如果有人能指出我的错误,我会很高兴。
答案 0 :(得分:1)
问题是一旦MoreColors停止,生成器颜色就不会停止。在完成MoreColors之后,Colors的执行从它停止的地方继续,因此它在完成之前将返回“green”。那是因为生成器不会“变成”MoreColors,而是返回它的答案,并且仍然会在Colors上调用.next()方法。