Node.js のイベント モジュールについて話しましょう

青灯夜游
リリース: 2021-12-06 18:42:21
転載
4663 人が閲覧しました

この記事では、Node.js モジュールのイベント モジュールを理解し、イベント駆動型とは何か、NodeJS のイベント アーキテクチャ、イベント モジュールのコア API などを紹介します。皆さんのお役に立てれば幸いです!

Node.js のイベント モジュールについて話しましょう

公式説明の引用: Node.js のコア API のほとんどは、慣用的な非同期イベント駆動型アーキテクチャを中心に構築されており、特定の型のオブジェクト ( 「トリガー」と呼ばれる)は、指定されたイベントを起動し、Function オブジェクト (「リスナー」) を呼び出します。

Node の調査と適用を通じて、NodeJS がシングルスレッド、イベント駆動型、ノンブロッキング I/O およびその他のアーキテクチャ設計を採用していることがわかりました。同時実行性が高く、I/O 集中型のアプリケーションに適しています。

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

イベントドリブンとは、簡単に言うと、効果的な方法でイベントのステータスの変化を 監視し、変化が発生したときに対応するアクションを実行することです。

理解するために、人生のアプリケーションのシナリオを考えてみましょう。私たちがレストランに食べ物を注文するとき、注文をした後、ウェイターは注文番号を教えてくれます (これはイベントの登録と理解できます)。私たちは座っています 待っている間、私たちの耳はウェイターの呼びかけを聞いていました。呼ばれたら、フロントデスクに食事を取りに行くことができます。

2. イベント モデル

NodeJS のイベント アーキテクチャは、古典的なサブスクリプション発行モデルを採用しています

サブスクリプション発行モデルは、メッセージ メカニズムと呼ぶこともできます。依存関係。この依存関係は、オブジェクトの対応する状態遷移を同時に監視する N (複数または単一) のオブザーバーのペアとして理解できます。変更が発生すると、すべてのオブザーバーに通知され、オブザーバーによって登録された対応するイベントがトリガーされます。デザインパターンは、対象物と観察者の間の機能的結合を解決します。

3. events モジュール

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

簡単な使用法:

import { EventEmitter } from 'events';

class MyEmiter extends EventEmitter{};

const myEmitter = new MyEmiter();

myEmitter.on('hello', () => {
  console.log('hello 有人喊你啦');
});

myEmitter.emit('hello');
ログイン後にコピー

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

4.1

eventEmitter.on(eventName, callback)

イベントをリッスンするために登録します##パラメータ:

#eventName: イベント名

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

  • 4.2
  • eventEmitter.once(eventName, callback)

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

eventName: イベント名

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

  • 4.3
  • eventEmitter.emit(eventName[, ...args])

指定されたリスニング イベントをトリガーしますパラメータ:

eventName: イベント名

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

  • 4.4
  • eventEmitter.removeListener(eventName, callback)

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

eventName: イベント名

callback: コールバック関数

  • 4.5
  • EventEmitter.removeAllListeners (eventName)

すべてのリスナーを削除します。イベントには複数のリスナーを含めることができます。それらをすべて削除する必要がある場合は、このメソッドを使用できます。 パラメータ:

eventName: 完全に削除する必要があるイベントの名前;

次の場合に注意することが重要です。パラメータが渡されない場合、すべての監視イベントが削除されます。これは比較的暴力的であるため、注意して使用することをお勧めします。
4.6

EventEmitter.listeners(eventName)

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

4.7

EventEmitter.eventNames()

トリガーがリスナーを登録したイベントをリストする配列を返します。 4.8 EventEmitter.setMaxListeners(n)

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

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

0

) に設定できます。 5. 同期と非同期の問題

EventEmitter

すべてのリスナーを登録順に synchronously 呼び出します。これにより、イベントの正しい順序が保証され、競合状態やロジック エラーを回避できます。

6. エラー処理

EventEmitter

インスタンスでエラーが発生した場合、一般的な操作は 'error'# をトリガーすることです。 ## イベント。これらは Node.js では特殊なケースとして扱われます。

如果 EventEmitter 没有为 'error' 事件注册至少一个监听器,并且触发 'error' 事件,则会抛出错误,打印堆栈跟踪,然后退出 Node.js 进程。

作为最佳实践,应始终为 'error' 事件添加监听器。

import { EventEmitter } from 'events';

class MyEmiter extends EventEmitter{};

const myEmitter = new MyEmiter();

myEmitter.on('hello', () => {
  console.log('hello 有人喊你啦');
});

myEmitter.on('error', (e) => {
  console.log(e)
})

myEmitter.emit('hello');
myEmitter.emit('error', new Error('an error happen'))
ログイン後にコピー

更多node相关知识,请访问:nodejs 教程!!

以上がNode.js のイベント モジュールについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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