• Node.js Video Tutorials

NodeJS - emitter.rawListener() 方法


emitter.rawListeners() 方法用於檢索特定事件 eventName 的監聽器陣列的副本。即使這些監聽器包括任何包裝器(由 emitter.once() 方法建立),此方法也會返回監聽器的陣列副本。

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

語法

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

emitter.rawListeners(eventName);

引數

此方法只接受一個引數。

  • eventName:此引數儲存名為 eventName 的事件。

返回值

此方法返回特定事件 eventName 的監聽器陣列的副本。它還會返回由 emitter.once() 方法建立的任何包裝器的監聽器陣列的副本。

示例 1

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

我們將一個監聽器函式 `func()` 與事件名 `myEvent` 傳遞給 emitter.once() 方法(此方法包含包裝器)。然後我們返回一個包含函式 `onceWrapper` 的新陣列,該函式具有一個包含原始監聽器的屬性 `listener`。然後我們透過呼叫 `eventFnWrapper.listener()` 將函式內的文字記錄到控制檯,並且它不會取消繫結 `once` 事件。再次呼叫 `eventFnWrapper()` 將函式內的文字記錄到控制檯,現在這將刪除監聽器。

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


function func(){
    console.log('log once');
};

emitter.once('myEvent', func);
 
console.log(emitter.rawListeners('myEvent'));

const listeners = emitter.rawListeners('myEvent');
const eventFnWrapper = listeners[0];

eventFnWrapper.listener();

eventFnWrapper();

console.log(emitter.rawListeners('myEvent'));

輸出

上述程式產生以下輸出:

[ [Function: bound onceWrapper] { listener: [Function: func] } ]
log once
log once
[]

示例 2

在這個程式中,我們透過 `emitter.addListener` 添加了事件。然後我們返回一個包含單個繫結函式 `.addListener()` 的新陣列。然後我們兩次記錄監聽器函式 func() 內的訊息。

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

function func(){
    console.log('log once');
};

emitter.addListener('MyEvent', func)
const newListeners = emitter.rawListeners('MyEvent');

newListeners[0]();
emitter.emit('MyEvent');

console.log(emitter.rawListeners('MyEvent'));

輸出

上述程式產生以下輸出:

log once
log once
[ [Function: func] ]

示例 3

以下另一個示例,我們為 'start' 事件添加了一個 on 監聽器和一個 once 監聽器,並使用 rawListeners('start') 檢索原始監聽器。因此,我們遍歷監聽器並確定每個監聽器是 on 監聽器還是 once 監聽器。

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

const eventEmitter = new EventEmitter();

eventEmitter.on('start', () => {
    console.log('started');
});

eventEmitter.once('start', () => {
    console.log('started (once)');
});

const listeners = eventEmitter.rawListeners('start');

listeners.forEach(listener => {
    if (listener.listener) {
        console.log('Found an "once" listener:', listener.listener);
    } else {
        console.log('Found an "on" listener:', listener);
    }
});

輸出

上述程式產生以下輸出:

Found an "on" listener: [Function (anonymous)]
Found an "once" listener: [Function (anonymous)]
nodejs_events.htm
廣告