4

ノード (フラグ付きの 0.11.9 --harmony) では、終了後にジェネレーターを再起動するにはどうすればよいですか?

やってみgenerator.send(true);ましたが、 send() メソッドが存在しないと表示されます。

4

2 に答える 2

3

少し遅れましたが、これは参考までに。

現時点では、この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}
于 2014-01-16T15:46:04.990 に答える