ノード (フラグ付きの 0.11.9 --harmony
) では、終了後にジェネレーターを再起動するにはどうすればよいですか?
やってみgenerator.send(true);
ましたが、 send() メソッドが存在しないと表示されます。
ノード (フラグ付きの 0.11.9 --harmony
) では、終了後にジェネレーターを再起動するにはどうすればよいですか?
やってみgenerator.send(true);
ましたが、 send() メソッドが存在しないと表示されます。
少し遅れましたが、これは参考までに。
現時点では、このsend
メソッドは Node では実装されていませんが、Nightly (FF) では実装されていますが、何らかの形でのみ実装されています。
毎晩:
*なしでジェネレーターを宣言すると、send
メソッドを持つイテレーターが得られます。
var g = function() {
var val = yield 1; // this is the way to get what you pass with send
yield val;
}
var it = g();
it.next(); // returns 1, note that it returns the value, not an object
it.send(2); // returns 2
ノード & ナイトリー:
さて、ジェネレーターの実際の構文では、生成function*(){}
するイテレーターにはメソッドがありませんsend
。しかし、動作は実際にはnext
メソッドに実装されていました。send(true);
また、イテレータを自動的に再起動することを意図したものではないことに注意してください。手動で再起動するには、によって返された値をテストするyield
必要があります (リンクしたページの例を参照してください)。偽の値でない限り、どの値でも機能します。自分で見て:
var g = function*() {
var val = 1;
while(val = yield val);
}
var it = g();
it.next(); // {done: false, value: 1}
it.next(true); // {done: false, value: true}
it.next(2); // {done: false, value: 2}
it.next(0); // {done: true, value: undefined}