今天我要來跟大家介紹一下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中文網其他相關文章!