删除监听事件
前面已经学习了如何添加及触发监听事件,如果添加的监听事件不需要了,可以将它删除。删除监听事件的方法如下。
-
removeListener(eventName,listener)
:删除指定名称的监听事件。 -
removeAllListeners([eventName])
:删除全部监听事件。
下面通过一个实例来演示如何使用 Node.js 中删除监听事件的方法。
【例5.6】删除指定的监听事件。(实例位置:资源包\源码\05\06)
该实例在例5.4的基础上进行修改,将要添加到监听事件的回调函数单独定义,并添加到 event
监听事件并触发;在触发监听事件后,使用 removeListener
方法删除该监听事件,并通过输出删除前后的监听事件名称进行对比。代码如下:
//引入events模块
var events = require('events');
//生成EventEmitter对象
var custom = new events.EventEmitter();
function listener() {
console.log('触发监听事件!');
}
//添加监听事件event
custom.on('event', listener);
//主动触发监听事件event
custom.emit('event');
console.log(custom.eventNames()); //输出删除前的监听事件名称
custom.removeListener('event',listener) ; //删除event事件
console.log(custom.eventNames()); //输出删除后的监听事件名称
在 |
运行程序,效果如图5.7所示。

在使用 removeListener
方法删除监听事件时,如果同一个事件监听器被多次添加到指定 eventName
的监听器数组中,则必须多次调用 removeListener
方法才能删除所有事件。例如,将例5.6的代码修改如下:
//引入events模块
var events = require('events');
//生成EventEmitter对象
var custom = new events.EventEmitter();
function listener() {
console.log('触发监听事件!');
}
//添加监听事件event
custom.on('event', listener);
/*多次添加同一个事件*/
custom.on('event', listener);
custom.on('event', listener);
custom.on('event', listener);
//主动触发监听事件event
custom.emit('event');
console.log(custom.eventNames()); //输出删除前的监听事件名称
custom.removeListener('event',listener); //删除event事件
console.log(custom.eventNames()); //输出删除后的监听事件名称
上面代码中为 event
事件添加了 4 次 listener
回调函数,但只使用 removeListener
删除了一次 event
事件,运行结果如图5.8所示。

观察图5.8可以看出,删除前后,event
事件都存在,说明使用 removeListener
并没有完全删除多次添加的 event
事件。这时,如果想要完全删除 event
事件,可以使用 removeListener
方法删除 4 次,也可以直接使用 removeAllListeners
删除所有的监听事件,代码如下:
custom.removeAllListeners('event'); //删除所有event事件