Wie am besten kann ich sagen, dass das nicht möglich ist. Pro this useful wiki und die draft version of ES6 auf Generatoren, sobald Sie von ihm zurückgekehrt sind (anstatt nachgegeben), es setzt es in den "closed"
Zustand und es gibt keine Möglichkeit, es wieder in den "newborn"
Zustand, wie ein neuer Generator beginnt.
Möglicherweise müssen Sie einen Rückruf an Ihren anderen Bereich zum Erstellen eines neuen Generators übergeben. Als Umgehung könnten Sie diesen Rückruf sogar als benutzerdefinierte Methode für den Generator hinzufügen, den Sie an den anderen Bereich gesendet haben, wenn Sie möchten, und dieser Rückruf würde einen neuen Generator für den anderen Bereich erstellen.
Wenn Sie darüber nachdenken, wie Generatoren funktionieren, müssen sie von Grund auf neu ausführen, um ihren Ausgangszustand zurückzusetzen, und es gibt einfach keinen Grund, das zu unterstützen. Das wäre sinngemäß zu fragen, warum Sie nicht einfach den Konstruktor für ein existierendes Objekt erneut ausführen können und erwarten, dass ein neues Objekt in demselben Objekt vorhanden ist. Während alles technisch machbar ist, ist es haarig, die Arbeit richtig zu machen, und es gibt wirklich keinen Grund, es zu unterstützen. Wenn Sie ein jungfräuliches Objekt möchten, erstellen Sie einfach ein neues Objekt. Gleiches gilt für einen Generator.
Dies ist ein bisschen ein Hack, aber eine seltsame Sache zu betrachten. Du könntest einen Generator machen, der sich wiederholt. Angenommen, Ihr Generator wie folgt gearbeitet:
var generator = function*() {
while (true) {
yield 1;
yield 2;
yield 3;
yield null;
}
};
var iterable = generator();
for (let x of iterable) {
if (x === null) break;
console.log(x);
}
// generator is now in a state ready to repeat again
Ich kann leicht sehen, wie könnte dies ein anti-Muster sein, obwohl, weil, wenn Sie jemals tun:
for (let x of iterable) {
console.log(x);
}
Sie eine Endlosschleife haben , also müsste es mit großer Sorgfalt verwendet werden. Zu Ihrer Information, das obige Wiki zeigt Beispiele einer unendlichen Fibonacci-Sequenz, so dass ein unendlicher Generator sicherlich in Erwägung gezogen wird.
nicht dem aktuellen Entwurf nach: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iterator-interface –
Btw, sollte nicht ' für (sei x in iterierbar) 'sei' für (x von iterierbar)'? –
Ja, Sie haben Recht - ich werde den Code aktualisieren. – dvlsg