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.once('my-event', () => {
//只調用一次回調函數
})
emitter.prependListener()
使用on
或addListener
添加監聽器時,它會被添加到監聽器隊列的最後,並且最後被調用。使用prependListener
,它會被添加到監聽器前面,並且在其他監聽器之前被調用。
emitter.prependOnceListener()
使用once
添加監聽器時,它會被添加到監聽器隊列的最後,並且最後被調用。使用prependOnceListener
,它會被添加到監聽器前面,並且在其他監聽器之前被調用。
emitter.removeAllListeners()
刪除EventEmitter對象中所有監聽指定事件的監聽器:
door.removeAllListeners('open')
emitter.removeListener()
刪除特定的監聽器。可以通過在添加時將回調函數保存到變量中,以便以後引用它:
const doSomething = () => {}
door.on('open', doSomething)
door.removeListener('open', doSomething)
emitter.setMaxListeners()
設定可以添加到EventEmitter對象的最大監聽器數量,默認為10,但可以增加或降低。
door.setMaxListeners(50)