• Node.js Video Tutorials

NodeJS - emitter.on() 方法


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

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

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

語法

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

eventEmitter.on(eventName, listener)

引數

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

  • EventName: 它是唯一標識事件的字串或符號。
  • Listener: 它是當發出指定事件時將執行的回撥函式。

返回值

它返回特定事件的事件監聽器。當發出指定的事件時,將執行提供的回撥函式。

示例 1

以下是 NodeJs emitter.on() 方法的基本示例。

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

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

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

myEmitter.on('eventOne', func1);

myEmitter.emit('eventOne');

輸出

上述程式產生以下輸出:

Welcome peeps!

示例 2

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

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

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

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

myEmitter.emit('eventOne');

輸出

上述程式產生以下輸出:

Welcome peeps!
Hope you have a good day.

示例 3

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

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

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

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

myEmitter.emit('eventOne');

輸出

上述程式產生以下輸出:

Welcome peeps!
Hope you have a good day.
Hope you have a good day.

示例 4

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

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

const myEmitter = new EventEmitter();

function func1() {
   console.log('Welcome peeps!');
}

function func2() {
   console.log('Hope you have a good day.');
}

function func3() {
  console.log('This will be added first');
}

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

myEmitter.emit('eventOne');

輸出

上述程式產生以下輸出:

This will be added first
Welcome peeps!
Hope you have a good day.
nodejs_events.htm
廣告