• Node.js Video Tutorials

NodeJS - emitter.getMaxListeners() 方法


emitter.getMaxListeners() 方法將幫助我們返回 eventEmitter 的當前最大監聽器限制值,該值由 emitter.setMaxListeners(n) 設定。

此方法除了返回 eventEmitter 的最大監聽器限制之外,不會執行任何其他操作。

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

語法

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

emitter.getMaxListners()

引數

  • 此方法不接受任何引數。

返回值

此方法將返回偵聽名為 eventName 的事件的監聽器函式的數量。

示例 1

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

最初,我們匯入了 node:events 模組。然後,我們將單個監聽器函式 ‘f1()’ 與 eventName ‘myEvent’ 一起傳遞給 emitter.addListener() 方法。然後,我們透過將 ‘myEvent’ 作為引數呼叫了 emitter.getMaxListeners() 方法。它返回 ‘10’,因為“預設情況下,EventEmitters 對於特定事件僅接受 10 個監聽器”。

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

function f1(){
};

myEmitter.addListener('myEvent', f1);

console.log(myEmitter.getMaxListeners());

輸出

以上程式產生以下輸出:

10

示例 2

在此程式中,我們再次將單個監聽器函式 ‘f1()’ 與 eventName ‘myEvent’ 一起傳遞給 emitter.addListener() 方法。然後,我們透過將預設限制修改為 1 來呼叫 emitter.setMaxListeners() 方法。

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

function f1(){
};

myEmitter.setMaxListeners(1);
myEmitter.addListener('myEvent', f1);

console.log(myEmitter.getMaxListeners());

輸出

以上程式產生以下輸出:

1

示例 3

在此程式中,我們將監聽器限制設定為 ‘1’ 到特定事件 ‘myEvent’,並且我們向名為 ‘myEvent’ 的同一事件添加了 4 個監聽器。因此,EventEmitter 將丟擲一個警告訊息,即“檢測到記憶體洩漏”。

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

function f1(){
};
function f2(){
};
function f3(){
};
function f4(){
};

myEmitter.setMaxListeners(1);
myEmitter.addListener('myEvent', f1);
myEmitter.addListener('myEvent', f2);
myEmitter.addListener('myEvent', f3);
myEmitter.addListener('myEvent', f4);

console.log(myEmitter.getMaxListeners());

輸出

以上程式產生以下輸出:

1

(node:33292) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 2 myEvent listeners added to [EventEmitter]. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
nodejs_events.htm
廣告