• Node.js Video Tutorials

NodeJS - emitter.addListener() 方法


emitter.addListener() 方法用於將監聽器函式新增到名為 eventName 的事件的陣列末尾。無法檢查監聽器是否已新增到監聽器陣列。

如果多次呼叫emitter.addListener() 方法並傳遞 eventName 和 listener 的相同組合,則監聽器函式將被新增到監聽器陣列中,並且將被呼叫其新增的次數。

此方法屬於Eventemitter 類,它是 node:events 模組的內建類。

語法

以下是 NodeJs emitter.addListener() 方法的語法:

emitter.addListener(eventName, listener)

引數

此方法接受下面列出的兩個引數:

  • EventName: 這是方法的第一個引數,它儲存事件的名稱。它可以是字串或符號。
  • Listener: 當指定事件發生時執行的回撥函式。

返回值

它返回添加了監聽器的 EventEmitter 的例項。

示例 1

首先,我們匯入了node:events 模組。我們建立了一個帶有訊息的函式 func1。然後,我們使用 eventName 作為第一個引數呼叫了emitter.addListener() 方法,並將 (func1) 傳遞給了方法的 listener 引數。因此,該函式被新增到監聽器陣列中。因此,當我們編譯並執行程式時,它將列印監聽器函式內的訊息。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Hi, im from function1');
}

myEmitter.addListener('eventOne', func1);

myEmitter.emit('eventOne'); 

輸出

以上程式產生以下輸出:

Hi, im from function1

示例 2

在此示例中,我們建立了兩個函式並將它們傳遞給 listener 函式引數。因此,myEmitter.addListener() 方法將監聽器函式新增到名為 eventOne 的事件的監聽器陣列的末尾。然後它將首先列印 func1,然後列印 func2。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Hi, im from function1');
}

function func2() {
   console.log('Hi, im from function2');
}

myEmitter.addListener('eventOne', func1);
myEmitter.addListener('eventOne', func2);

myEmitter.emit('eventOne'); 

輸出

以上程式產生以下輸出:

Hi, im from function1
Hi, im from function2

示例 3

以下是一個示例,這裡我們將 eventName 和 listener 的相同組合傳遞給方法。這將導致監聽器函式被新增到監聽器陣列中並多次呼叫。因此,當我們編譯並執行程式時,我們可以看到 func2 被添加了兩次到監聽器陣列中並在輸出上列印了兩次。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Hi, im from function1');
}

function func2() {
   console.log('Hi, im from function2');
}


myEmitter.addListener('eventOne', func1);
myEmitter.addListener('eventOne', func2);
myEmitter.addListener('eventOne', func2);

myEmitter.emit('eventOne');

輸出

執行上述程式後,它將顯示以下輸出:

Hi, im from function1
Hi, im from function2
Hi, im from function2

示例 4

注意:預設情況下,事件監聽器按新增順序呼叫。

在此示例中,我們使用 emitter.prependListener() 方法使用了與之前傳遞給 myEmitter.addListener() 方法相同的 eventName。然後,我們將一個函式 fucn3 傳遞給 emitter.prependListener() 方法。因此,這會將該函式新增到監聽器陣列的開頭。因此,當我們編譯並執行程式時,傳遞到 emitter.prependListener() 方法中的函式將首先被列印。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function func1() {
   console.log('Hi, im from function1');
}

function func2() {
   console.log('Hi, im from function2');
}

function func3() {
  console.log('Hi, im from function3 but i will be added at top the array.');
}

myEmitter.addListener('eventOne', func1);
myEmitter.addListener('eventOne', func2);
myEmitter.prependListener('eventOne', func3);

myEmitter.emit('eventOne');

輸出

執行上述程式後,它將顯示以下輸出:

Hi, im from function3 but i will be added at top the array.
Hi, im from function1
Hi, im from function2
nodejs_events.htm
廣告