1

特定のイベントに対してリスナーが「順番に」実行されることをドキュメントで確認しましたが、他にどのような保証がありますか? たとえば、次のコードは 0 から 9 を順番に出力することが保証されていますか、それとも現在の実装の単なる副作用ですか?

var EventEmitter = require('events').EventEmitter
var ev = new EventEmitter();

ev.on("foo", console.log);

for (var i = 0; i < 10; i++) {
    ev.emit("foo", i);
}
4

2 に答える 2

2

たとえば、次のコードは 0 から 9 を順番に出力することが保証されていますか?

うーん。どこのドキュメントでも実際に保証されているとは思いませんが、それがイベントキューが機能する唯一の合理的な方法です。イベントが送信された順序で配信されない場合、受信側で非常に複雑なロジックが発生する可能性があります。

あなたの質問に対するコメントの1つで指摘されているように、すべてJavaScriptの場合、イベントはemit()呼び出し中に同期的にディスパッチされるため、他の方法では機能しません。ネイティブ オブジェクトの場合も、同様のことが当てはまります。V8 バインディングを介して emit() を呼び出す必要があるため、最終的には、これらのイベントもネイティブ コードが送信した順序で配信されます。

于 2013-07-19T17:35:35.647 に答える