当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Node.js EventEmitter emitter.removeListener(eventName, listener)用法及代码示例

emitter.removeListener(eventName, listener)

添加于:v0.1.26

参数

从名为 eventName 的事件的侦听器数组中删除指定的 listener

const callback = (stream) => {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

removeListener() 最多会从监听器数组中移除一个监听器实例。如果任何单个侦听器已多次添加到指定 eventName 的侦听器数组中,则必须多次调用 removeListener() 以删除每个实例。

一旦一个事件被发射,所有在发射时附加到它的监听器都会被依次调用。这意味着任何 removeListener()removeAllListeners() 在发出之后和最后一个侦听器完成执行之前的调用都不会将它们从正在进行的 emit() 中删除。后续事件按预期运行。

const myEmitter = new MyEmitter();

const callbackA = () => {
  console.log('A');
  myEmitter.removeListener('event', callbackB);
};

const callbackB = () => {
  console.log('B');
};

myEmitter.on('event', callbackA);

myEmitter.on('event', callbackB);

// callbackA removes listener callbackB but it will still be called.
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Prints:
//   A
//   B

// callbackB is now removed.
// Internal listener array [callbackA]
myEmitter.emit('event');
// Prints:
//   A

因为侦听器是使用内部数组管理的,所以调用它会更改在侦听器被删除后注册的任何侦听器的位置索引。这不会影响调用侦听器的顺序,但这意味着需要重新创建 emitter.listeners() 方法返回的侦听器数组的任何副本。

当单个函数多次添加为单个事件的处理程序时(如下例所示),removeListener() 将删除最近添加的实例。在示例中,once('ping') 监听器被移除:

const ee = new EventEmitter();

function pong() {
  console.log('pong');
}

ee.on('ping', pong);
ee.once('ping', pong);
ee.removeListener('ping', pong);

ee.emit('ping');
ee.emit('ping');

返回对 EventEmitter 的引用,以便可以链接调用。

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 emitter.removeListener(eventName, listener)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。