2

node.js でイベントを使用してコードを実行したいと考えています。私の質問は、呼び出されたイベント コードのスコープは何ですか? 具体的には、イベント インボーカーのスコープを共有していますか、それとも「分離」されていますか? イベントで呼び出されたコードにパラメーターを渡して同様の効果を達成できることはわかっていますが、理想的には、呼び出しスコープを利用できるようにしたいと考えています。

4

2 に答える 2

4

イベントは、呼び出し元のスコープに関連付けられています。つまり、モジュールからエクスポートされたEventEmitterは、同じEventEmitterから発行されたイベントをリッスンするためにのみ使用できます。

NodejsEventEmitter-リスナー関数のスコープを定義します

于 2012-11-06T18:43:22.583 に答える
2

イベントを発行するときは、後でノード イベント システムによって処理されるようにキューに入れます。emitイベントが発行されるスコープの変数はすべて、引数としてに渡す必要があります。ノードがそのイベントを受け取り、バインドされたすべてのコールバックをトリガーすると、それは個別の「クリーン」スコープと個別の「クリーン」スタックの両方で発生します。(補足として、これが、ノードのスタック トレースがデバッグの邪魔になる可能性がある理由です)。

var events = require('events');

var myEmitter = new events.EventEmitter();

function closure1(word, number) {
  function closure2(animal, vegetable) {
    myEmitter.emit('hey', word, number, animal, vegetable, 43);
  }
  closure2("horse", "carrot");
}

myEmitter.on('hey', function (word, number, animal, vegetable, anotherNumber) {
  console.log('hey event fired with', word, number, animal, vegetable, anotherNumber);
});
closure1("table", 42);

それを実行すると、「テーブル 42 馬ニンジン 43 で発射されたイベント」と出力されます。

Emitter.emit(event, [arg1], [arg2], [...] の node.js ドキュメントを参照してください。

于 2012-11-06T18:59:31.400 に答える