Node.js イベントエミッター

DDD
DDDオリジナル
2024-12-12 22:16:11821ブラウズ

Node.js EventEmitter

今日は EventEmitter クラスについて説明します。ご存知のとおり、Node.js にはイベント駆動型プログラミング パラダイムがあります。これは、いくつかのイベントとコールバックを定義し、イベントがプログラム フロー内でトリガーされて処理されることを意味します。なぜこのようなアプローチを採用したかというと、前回の記事で詳しく説明した JavaScript がシングルスレッドで動作し、非同期操作を何らかの方法でブロックせずに処理する必要があるためです。

これが EventEmitter クラスとどのような関係があるのか​​というと、このクラスは非同期操作を簡単に処理できる構造を提供します。実際、これは Observer デザイン パターンの実装です。

const EventEmitter = require("events");
class Emitter extends EventEmitter {}

const myE = new Emitter();

myE.on("test", () => {
  console.log("event meydana geldi.");
});
myE.on("test", () => {
  console.log("event meydana geldi.");
});
myE.on("test", () => {
  console.log("event meydana geldi.");
});

console.log(myE.eventNames());

myE.emit("test");

上では、イベントを定義して呼び出す方法の簡単な例を書きました。ここで、「on」メソッドは実際に空のオブジェクト (マスター オブジェクト) に「test」という配列を作成します。

{
  test: [
    [Function (anonymous)],
    [Function (anonymous)],
    [Function (anonymous)]
  ]
}

ここでは、「on」メソッドがeventNameという名前で3回呼び出され、結果の構造は上記のようになります。
ご想像のとおり、「test」という名前のイベントは「emit」メソッドで呼び出されます。ここで、foreach メソッドはテスト配列を返し、その中の関数を呼び出します。

では、この構造はどこで使用されているのでしょうか?
たとえば、DOM イベントでは;

const btn = document.getElementById("btn");
btn.addEventListener("click", () => {
  console.log("clicked");
});

たとえば、Node.js アプリケーションのネットワーク リクエスト内;

const http = require("http");
const req = http
  .request(
    {
      method: "GET",
      hostname: "jsonplaceholder.typicode.com",
      path: "/todos/1"
    },
    (res) => {
      res.on("data", (chunk) => {
        console.log(chunk.toString());
      });

      res.on("end", () => {
        console.log("response ended.");
      });
    }
  )
  .end();

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。