• 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
广告
© . All rights reserved.