node.js でイベントを使用してコードを実行したいと考えています。私の質問は、呼び出されたイベント コードのスコープは何ですか? 具体的には、イベント インボーカーのスコープを共有していますか、それとも「分離」されていますか? イベントで呼び出されたコードにパラメーターを渡して同様の効果を達成できることはわかっていますが、理想的には、呼び出しスコープを利用できるようにしたいと考えています。
1887 次
2 に答える
4
イベントは、呼び出し元のスコープに関連付けられています。つまり、モジュールからエクスポートされたEventEmitterは、同じEventEmitterから発行されたイベントをリッスンするためにのみ使用できます。
于 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 に答える