首頁 > web前端 > js教程 > Node.js 事件發射器

Node.js 事件發射器

DDD
發布: 2024-12-12 22:16:11
原創
819 人瀏覽過

Node.js EventEmitter

今天我要來跟大家介紹一下EventEmitter類別。如您所知,Node.js 具有事件驅動的程式設計範例。這意味著我們將定義一些事件和回調,我們的事件將在我們的程式流程中觸發和處理。如果你問為什麼要採用這種方法,那是因為 JavaScript(我在上一篇文章中更詳細地解釋過)運行單線程,而非同步操作必須以某種方式處理而不阻塞。

如果你問這一切與 EventEmitter 類別有什麼關係,這個類別為我們提供了一個可以輕鬆處理非同步操作的結構。實際上,這就是觀察者設計模式的實現。

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)]
  ]
}
登入後複製

這裡,名為 eventName 的「on」方法被呼叫了 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板