node.jsイベントとEventeMitter

Christopher Nolan
リリース: 2025-02-24 09:14:10
オリジナル
742 人が閲覧しました

Node.js Events and EventEmitter

node.jsの効率は、そのイベントベースのアーキテクチャによるものです。必要なすべてのファイル(PHPなど)すべてのリクエストを読み取るのとは異なり、node.jsはサーバーを開始し、ほとんどの変数を初期化し、関数を宣言し、イベントが発生するのを待ちます。 node.jsには、requestイベントなど、いくつかの有用なイベントが組み込まれていますが、カスタムイベントを作成してトリガーすることができても便利ではありませんか?この記事では、これを達成する方法について説明します。まず、通常のイベントを発行する方法を示します。たとえば、誰かが店に入ると、ベルはその存在を示すために鳴ります。これは、イベントが被験者として機能し、イベントに添付されたすべての機能がオブザーバーのようなものであるオブザーバーパターンに似ています。ストアの例は次のとおりです

const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
最初に、node.jsコアモジュール

をロードします。次に、eventsクラスのインスタンスを作成します(後で拡張します)。その後、この方法で呼び出すことができるように、EventEmitter関数を変数に配置します。コンソールに「リングリング」を印刷するだけです。次は重要なポイントです。 ringBellメソッドを使用して、最初のパラメーターはイベント名であり、2番目のパラメーターが追加される関数です。これは実際には何もしませんでしたが、機能を登録しました。本当の魔法は、イベントを発行するときに次の行で起こります。 eventEmitter.on()メソッドを呼び出すと、ringBellメソッドに登録されているすべての関数が実行されます。これはそれほど面白くありません。ベルを鳴らしたいだけなら、関数を直接呼び出すことができます。しかし、それはイベントの興味深いことです。好きなだけ多くの機能を登録できます。たとえば、これを行うこともできます:doorOpen emit() onこれも同様に機能し、

によって提供される機能を最大限に活用します。リスナーとしてパラメーターを備えた関数を使用することもできます。
eventEmitter.on('doorOpen', ringBell);
eventEmitter.on('doorOpen', doSomething);
eventEmitter.on('doorOpen', doSomethingElse);

eventEmitter.emit('doorOpen');
ログイン後にコピー
ログイン後にコピー

EventEmitterメソッドでパラメーターを渡すだけです。これは非常に強力ですが、node.jsコミュニティでは、一般的な慣行は

クラスから継承することです。これを行うことができます
eventEmitter.on('doorOpen', (ring) => {
  console.log(ring);
});
eventEmitter.emit('doorOpen', 'ringeling');
ログイン後にコピー
ログイン後にコピー
イベントを発射する

メソッドを備えたクラスを作成します。このコードを参照してください:emit() EventEmitter Door open()オブジェクトのコンストラクターでは、ドアの色を設定し、doorOpenオブジェクトの

メソッドを使用して
const events = require('events');

function Door(colour) {
  this.colour = colour;
  events.EventEmitter.call(this);

  this.open = () => {
    this.emit('open');
  };
}

Door.prototype.__proto__ = events.EventEmitter.prototype;

const frontDoor = new Door('brown');

frontDoor.on('open', () => {
  console.log('ring ring ring');
});
frontDoor.open();
ログイン後にコピー
ログイン後にコピー
のコンストラクターメソッドを実行します。次に、「オープン」イベントを発する

メソッドを宣言します。このコード行:Door

const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

すべてのEventEmitterプロパティをオブジェクトにコピーします。次に、茶色のDoorのインスタンスであるfrontDoorを作成します。次に、イベントリスナーを追加し、最終的にドアを開けて、コンソールにメッセージを印刷します。誰もがこれが非常に強力で便利であることを誰もが見ることができることを願っています!最後に、Doorモジュールは、イベントに添付されたすべてのイベントリスナーをリストし、イベントリスナーを削除する方法を提供します。 events events

eventEmitter.on('doorOpen', ringBell);
eventEmitter.on('doorOpen', doSomething);
eventEmitter.on('doorOpen', doSomethingElse);

eventEmitter.emit('doorOpen');
ログイン後にコピー
ログイン後にコピー
属性を使用してそれを達成できます。もちろん、これはイベントリスナーとして匿名関数を使用していない場合にのみ機能します。必要に応じて、ドアからベルを取り除くことができます:

listeners

または、すべてのリスナーを削除することもできます:
eventEmitter.on('doorOpen', (ring) => {
  console.log(ring);
});
eventEmitter.emit('doorOpen', 'ringeling');
ログイン後にコピー
ログイン後にコピー

このガイドを読んでくれてありがとう、そしてあなたが何かを得ることを願っています!次回はまた会いましょう!
const events = require('events');

function Door(colour) {
  this.colour = colour;
  events.EventEmitter.call(this);

  this.open = () => {
    this.emit('open');
  };
}

Door.prototype.__proto__ = events.EventEmitter.prototype;

const frontDoor = new Door('brown');

frontDoor.on('open', () => {
  console.log('ring ring ring');
});
frontDoor.open();
ログイン後にコピー
ログイン後にコピー

node.jsイベントとEventemitter FAQ(FAQ)

node.jsのイベントクラスは何ですか?どのように機能しますか?

クラスは、オブジェクト間の通信を容易にするnode.jsのコアモジュールです。カスタムイベントを発行および処理するための

モジュールの一部です。 EventEmitterクラスは、名前付きイベントに関数またはイベントハンドラーを登録することで機能します。イベントがANeventsオブジェクトによって放出される場合、イベントに添付されたすべての関数は同期と呼ばれます。 EventEmitter EventEmitter eventemitterのインスタンスを作成する方法は?

のインスタンスを作成するのは簡単です。まず、

モジュールをインポートする必要があります。その後、EventEmitterキーワードを使用して新しいインスタンスを作成できます。簡単な例を次に示します:events new

eventemitterを使用してイベントを発する方法は?
Door.prototype.__proto__ = events.EventEmitter.prototype;
ログイン後にコピー

イベントを発行するには、

インスタンスの

メソッドを使用できます。この方法では、イベント名を指定し、イベントリスナーに任意の数のパラメーターを渡すことができます。例は次のとおりです。EventEmitter emit

eventemitterを使用してイベントを聞く方法は?
const ring = () => {
  console.log('ring');
};
frontDoor.on('open', ring);

console.log(require('util').inspect(frontDoor.listeners('open'))); // 输出 [ ring ]
ログイン後にコピー
イベントをリッスンするには、

インスタンスの

メソッドを使用できます。この方法により、イベント名とコールバック関数を指定することができます。これは、イベントが発現されたときに呼び出されます。例は次のとおりです。

EventEmitter on eventemitterの「オン」と「1回」のメソッドの違いは何ですか?

frontDoor.removeListener('open', ring);
ログイン後にコピー

メソッドを使用すると、イベントが放出されるたびに呼び出されるコールバック関数を追加できます。一方、

メソッドでは、イベントが初めて放出されたときにのみ呼び出されるコールバック関数を追加できます。

on eventemitterからイベントリスナーを削除するにはどうすればよいですか? once イベントリスナーを削除するには、インスタンスの

または

メソッドを使用できます。この方法により、イベント名と削除する必要があるコールバック関数を指定できます。例は次のとおりです。

const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

イベントのイベントのリスナーの数を制限できますか?

はい、EventEmitterインスタンスのsetMaxListenersメソッドを使用して、イベントのリスナーの数を制限できます。この方法では、イベントに追加できるリスナーの最大数を指定できます。

イベントのイベントのリスナーの数を取得するにはどうすればよいですか?

イベントのリスナーの数を取得するには、EventEmitterインスタンスのlistenerCountメソッドを使用できます。この方法では、イベント名を指定し、そのイベントのリスナーの数を返すことができます。

イベントのエラーを発行して処理できますか?

はい、EventEmitterでエラーを発行して処理できます。 EventEmittererrorイベントのリスナーを少なくとも登録せず、errorイベントが放出され、エラーがスローされ、スタックトレースが印刷され、node.jsプロセスが終了します。

ブラウザでEventeMitterを使用できますか?

EventEmitterはnode.jsモジュールであり、主にサーバー側のアプリケーションに使用されていますが、利用可能なブラウザーバージョンもあります。これらはnode.jsバージョンのように使用でき、クライアントコードで同じイベント駆動型アーキテクチャを使用できます。

以上がnode.jsイベントとEventeMitterの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート