Node.js のイベント モジュールに関する知識ポイントのまとめ

Node.js のイベント モジュールに関する知識ポイントのまとめ

Node の研究と応用を通じて、NodeJS はシングルスレッド、イベント駆動型、非ブロッキング I/O などのアーキテクチャ設計を採用しており、並行性が高く I/O を集中的に使用するアプリケーションに非常に適していることがわかりました。

1. イベント駆動とは何ですか?

イベント駆動型とは、簡単に言えば、効果的な方法でイベントステータスの変化を監視し、変化が発生したときにそれに応じたアクションを実行することです。

これを理解するために、日常生活のシナリオを使用しましょう。レストランで食事をして食べ物を注文すると、注文後、ウェイターが注文番号を伝え(これはイベントの登録として理解できます)、座って待ちます。このとき、私たちの耳は常にウェイターの呼び出し番号を聞いており、名前が呼ばれると、フロントデスクに行って食べ物を受け取ることができます。

2. イベントモデル

NodeJSのイベントアーキテクチャは、古典的なサブスクリプション公開モデルを使用します。

サブスクリプションおよびパブリケーション モード (メッセージ メカニズムとも呼ばれる) は依存関係を定義します。これは、1 対 N (複数または単一) のオブザーバーが同時にオブジェクトの対応する状態変化を監視することとして理解できます。変更が発生すると、すべてのオブザーバーに通知され、オブザーバーによって登録された対応するイベントがトリガーされます。この設計パターンは、メイン オブジェクトとオブザーバー間の機能的な結合を解決します。

3. イベントモジュール

イベント モジュールは、NodeJS で非常に重要なモジュールです。fs、http、net など、Node のモジュール実装のほとんどは、Events クラスを継承します。これは、オブジェクト events.EventEmitter を提供します。EventEmitter の中核は、イベントの発行とイベント リスナーです。

使い方は簡単:

'events' から EventEmitter をインポートします。
 
クラス MyEmiter は EventEmitter{} を拡張します。
 
const myEmitter = 新しい MyEmiter();
 
myEmitter.on('hello', () => {
  console.log('こんにちは、誰かがあなたに電話しています');
});
 
myEmitter.emit('hello');

4. イベントモジュールコアAPI

4.1 eventEmitter.on(イベント名、コールバック)

リスナーイベントの登録

パラメータ:

eventName: イベント名

コールバック: イベントがトリガーされたときに呼び出されるコールバック関数

4.2 eventEmitter.once(イベント名、コールバック)

特定のイベントに対して最大 1 回呼び出されるリスナーを登録することができます。 イベントがトリガーされると、リスナーは登録解除され、呼び出されます。

パラメータ:

eventName: イベント名

コールバック: イベントがトリガーされたときに呼び出されるコールバック関数

4.3 eventEmitter.emit(イベント名[, ...引数])

指定されたリスニングイベントをトリガーする

パラメータ:

eventName: イベント名

args はオプションのパラメータであり、順番にコールバック関数に渡されます。

4.4 eventEmitter.removeListener(イベント名、コールバック)

指定されたイベントのリスナーを削除します。注意: リスナーは登録されている必要があります。それ以外の場合は無効です。

パラメータ:

eventName: イベント名

コールバック: コールバック関数

4.5 EventEmitter.removeAllListeners(イベント名)

すべてのリスナーを削除します。イベントには複数のリスナーを設定できます。このメソッドは、すべてのリスナーを削除する必要がある場合に使用できます。

パラメータ:

eventName: 削除する必要があるイベントの名前。

パラメータが渡されない場合、すべての監視イベントが削除されることに注意してください。これは非常に危険なので、注意して使用する必要があります。

4.6 イベントエミッター.リスナー(イベント名)

eventName という名前のイベントのリスナー バインディング コールバック関数の配列のコピーを返します。

4.7 イベントエミッター.イベント名()

トリガーがリスナーを登録したイベントをリストする配列を返します。

4.8 イベントエミッター.setMaxListeners(n)

デフォルトでは、特定のイベントに 10 を超えるリスナーが追加された場合、EventEmitter は警告を出力します。

emittingter.setMaxListeners() メソッドを使用すると、この特定の EventEmitter インスタンスの制限を変更できます。 この値を Infinity (または 0) に設定すると、リスナーの数が無制限であることを示します。

5. 同期と非同期の問題

EventEmitter は、登録された順序ですべてのリスナーを同期的に呼び出します。これにより、イベントの正しい順序が保証され、競合状態や論理エラーを回避するのに役立ちます。

6. エラー処理

EventEmitter インスタンスでエラーが発生した場合、通常のアクションは「エラー」イベントを発行することです。 これらは Node.js では特別なケースとして扱われます。

EventEmitter に 'error' イベントのリスナーが 1 つも登録されていない場合に 'error' イベントが発生すると、エラーがスローされ、スタック トレースが出力され、Node.js プロセスが終了します。

ベストプラクティスとして、常に「エラー」イベントのリスナーを追加する必要があります。

'events' から EventEmitter をインポートします。
 
クラス MyEmiter は EventEmitter{} を拡張します。
 
const myEmitter = 新しい MyEmiter();
 
myEmitter.on('hello', () => {
  console.log('こんにちは、誰かがあなたに電話しています');
});
 
myEmitter.on('エラー', (e) => {
  コンソール.log(e)
})
 
myEmitter.emit('hello');
myEmitter.emit('error', new Error('エラーが発生しました'))

Node.js のイベントモジュールの豆知識についてはこれで終わりです。Node.js のイベントモジュールに関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • node.JS イベントの仕組みとイベントモジュールの使い方の詳しい説明
  • node.js でのイベントトリガーイベントの使用例の分析
  • Node.js 学習イベントモジュール イベントの使用例
  • Node.js events.EventEmitter の使い方の紹介

<<:  ウェブデザイン必携ハンドブック 216 ウェブセーフカラー

>>:  Docker コンテナ データ ボリュームの名前付きマウントと匿名マウントの問題

推薦する

MySQLデータベースイベントスケジュール実行タスクの詳細な説明

1. 背景プロジェクトの業務が進むにつれて、データベース テーブルの数がどんどん大きくなり、ハードデ...

CSS変換ページめくりアニメーションレコードの実装

ページめくりの問題のシナリオBとCは同じページ(表と裏)にありますページをめくって A をカバーした...

JSはユーザー登録インターフェース機能を実装します

この記事の例では、ユーザー登録インターフェース機能を実装するためのJSの具体的なコードを参考までに共...

Vue補間式とv-textディレクティブの違い

目次1. プラグイン式を使用する2. プラグイン式でv-cloakを使用してちらつきの問題を解決する...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...

Node の SMS API で検証コード ログインを実装するためのサンプル コード

1. ノードサーバーのセットアップ + データベース接続ここでの操作は比較的簡単でわかりやすいです。...

Vue が 4 レベルのナビゲーションと検証コードを実装する方法の例

効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...

VueはCanvasを使用してランダムなサイズで重なり合わない円を生成します

目次キャンバス関連文書エフェクト画像表示ケースの完全なコード親コンポーネントコードサブコンポーネント...

JSONP クロスドメインシミュレーション Baidu 検索

目次1. JSONPとは何か2. JSONPクロスドメインリクエスト3. Baidu検索をシミュレー...

JavaScriptとTypeScriptの関係

目次1. JavaScript とは何ですか? 2. JavaScript は何に使用されますか? ...

VScode リモート SSH リモート編集とデバッグコード

Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...

ストアド プロシージャでエラー状態をトリガーする mysql ストアド プロシージャの分析例 (SIGNAL および RESIGNAL ステートメント)

この記事では、例を使用して、MySQL がストアド プロシージャで引き起こすエラー状態 (SIGNA...

MySQL InnoDB ロック メカニズムの詳細な例

1. InnoDBのロック機構InnoDB ストレージ エンジンは、行レベルのロックとトランザクショ...

クラウド サーバー Ubuntu_Server_16.04.1 に MySQL をインストールしてリモート接続を有効にする方法

1. MySQLをインストールします。対応するソフトウェアをインストールするには、次の 3 つのコマ...