Node事件模組

Node.js的events模組提供了EventEmitter類別 events模組為我們提供了EventEmitter類別,這是在Node中處理事件的關鍵。 我在這篇完整的文章中發布了更多詳細內容,所以在這裡我僅描述API而不提供進一步的用例。 const EventEmitter = require('events') const door = new EventEmitter() 事件監聽器也使用這些事件: newListener 當監聽器被添加時 removeListener 當監聽器被移除時 以下是最常用方法的詳細說明: emitter.addListener() emitter.emit() emitter.eventNames() emitter.getMaxListeners() emitter.listenerCount() emitter.listeners() emitter.off() emitter.on() emitter.once() emitter.prependListener() emitter.prependOnceListener() emitter.removeAllListeners() emitter.removeListener() emitter.setMaxListeners() emitter.addListener() emitter.on()的別名。 emitter.emit() 觸發一個事件。按照它們註冊的順序同步調用每個事件監聽器。 emitter.eventNames() 返回一個字串陣列,表示當前EventListener上註冊的事件: door.eventNames() emitter.getMaxListeners() 獲取可以添加到EventListener對象的最大監聽器數量,默認為10,但可以通過使用setMaxListeners()增加或減少。 door.getMaxListeners() emitter.listenerCount() 獲取傳遞的事件的監聽器的數量: door.listenerCount('open') emitter.listeners() 獲取傳遞的事件的監聽器數組: door.listeners('open') emitter.off() emitter.removeListener()在Node 10中新增的別名。 emitter.on() 添加在事件觸發時調用的回調函數。 用法: door.on('open', () => { console.log('門被打開了') }) emitter.once() 添加在註冊後僅在首次觸發事件時調用的回調函數。這個回調函數只會被調用一次,後續不再調用。 const EventEmitter = require('events') const ee = new EventEmitter() ee....

Node事件發射器

如何在Node中使用自定義事件 如果你在瀏覽器中使用JavaScript,你知道多數的用戶互動是透過事件處理的,像是滑鼠點擊、鍵盤按鍵、對滑鼠移動作出反應等等。 在後端,Node給了我們使用events模組來建立類似的系統的選項。 這個模組中,有一個EventEmitter類別,我們會用它來處理我們的事件。 你可以使用以下語法來初始化一個EventEmitter物件: const EventEmitter = require('events') const eventEmitter = new EventEmitter() 這個物件暴露了許多方法,其中包括on和emit。 emit方法用於觸發一個事件。 on方法用於添加一個當事件觸發時要執行的回調函數。 觸發和監聽事件 舉個例子,我們來創建一個start事件,作為一個示範,我們只是對它作出反應,並將其日誌記錄到控制台: eventEmitter.on('start', () => { console.log('started') }) 當我們執行 eventEmitter.emit('start') 事件處理函數將會被觸發,並且我們將得到控制台日誌記錄。 addListener()是on()的別名,如果你看到那樣的寫法,它們表示的是同一個意思。 將參數傳遞給事件 你可以通過將它們作為額外的參數傳遞給emit()的方式,將參數傳遞給事件處理函數: eventEmitter.on('start', (number) => { console.log(`started ${number}`) }) eventEmitter.emit('start', 23) 多個參數: eventEmitter.on('start', (start, end) => { console.log(`started from ${start} to ${end}`) }) eventEmitter.emit('start', 1, 100) 只監聽一次事件 EventEmitter物件還提供了once()方法,你可以使用它來創建一個一次性事件監聽器。 一旦該事件觸發,該監聽器就停止監聽。 例如: eventEmitter.once('start', () => { console.log(`started!`) }) eventEmitter.emit('start') eventEmitter.emit('start') //不會觸發 刪除事件監聽器 一旦你創建了一個事件監聽器,你可以使用removeListener()方法來刪除它。...