我試圖理解發生器,但我發現了一個我不能遵循的例子。迭代發生器返回一個發生器
// 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);
}
輸出是: 「藍色」 「黃」 「橙」 「綠色」
我預計: 「藍色」 「黃色「 」橙色「
爲什麼我預計: 我認爲橙色已經返回後,該方法的.next()是呼籲迭代器MoreColors()。這應該返回一個對象,其物理值爲true爲物業.done。 由此,項目等於true並且while循環應停止。
顯然,我的期望是錯誤的。
我會很高興,如果有人能指出我錯了什麼。
'yield *'如果沒有fixup'done'屬性就沒用了;這意味着外部生成器報告在第一個委託生成器結束後立即完成。 – ShadowRanger