/

Node事件模組

Node事件模組

Node.js的events模組提供了EventEmitter類別

events模組為我們提供了EventEmitter類別,這是在Node中處理事件的關鍵。

我在這篇完整的文章中發布了更多詳細內容,所以在這裡我僅描述API而不提供進一步的用例。

1
2
const EventEmitter = require('events')
const door = new EventEmitter()

事件監聽器也使用這些事件:

  • newListener 當監聽器被添加時
  • removeListener 當監聽器被移除時

以下是最常用方法的詳細說明:

emitter.addListener()

emitter.on()的別名。

emitter.emit()

觸發一個事件。按照它們註冊的順序同步調用每個事件監聽器。

emitter.eventNames()

返回一個字串陣列,表示當前EventListener上註冊的事件:

1
door.eventNames()

emitter.getMaxListeners()

獲取可以添加到EventListener對象的最大監聽器數量,默認為10,但可以通過使用setMaxListeners()增加或減少。

1
door.getMaxListeners()

emitter.listenerCount()

獲取傳遞的事件的監聽器的數量:

1
door.listenerCount('open')

emitter.listeners()

獲取傳遞的事件的監聽器數組:

1
door.listeners('open')

emitter.off()

emitter.removeListener()在Node 10中新增的別名。

emitter.on()

添加在事件觸發時調用的回調函數。

用法:

1
2
3
door.on('open', () => {
console.log('門被打開了')
})

emitter.once()

添加在註冊後僅在首次觸發事件時調用的回調函數。這個回調函數只會被調用一次,後續不再調用。

1
2
3
4
5
6
const EventEmitter = require('events')
const ee = new EventEmitter()

ee.once('my-event', () => {
//只調用一次回調函數
})

emitter.prependListener()

使用onaddListener添加監聽器時,它會被添加到監聽器隊列的最後,並且最後被調用。使用prependListener,它會被添加到監聽器前面,並且在其他監聽器之前被調用。

emitter.prependOnceListener()

使用once添加監聽器時,它會被添加到監聽器隊列的最後,並且最後被調用。使用prependOnceListener,它會被添加到監聽器前面,並且在其他監聽器之前被調用。

emitter.removeAllListeners()

刪除EventEmitter對象中所有監聽指定事件的監聽器:

1
door.removeAllListeners('open')

emitter.removeListener()

刪除特定的監聽器。可以通過在添加時將回調函數保存到變量中,以便以後引用它:

1
2
3
const doSomething = () => {}
door.on('open', doSomething)
door.removeListener('open', doSomething)

emitter.setMaxListeners()

設定可以添加到EventEmitter對象的最大監聽器數量,默認為10,但可以增加或降低。

1
door.setMaxListeners(50)

tags: [“Node.js”, “EventEmitter”, “events”, “API”, “event listeners”]