Node 中很多对象都会触发事件:net.Server
在每次建立新连接时触发事件,fs.readStream
在文件打开时触发事件。所有能触发事件的对象都是 events.EventEmitter
的实例。您可以通过 require("events");
来访问此模块。
事件名称通常由驼峰式字符串表示,但这并不是强制要求,因为任何字符串都可以用作事件名称。
函数可以附加到对象,然后在事件触发时执行。这些函数被称为 监听器(listener)。
要访问 EventEmitter 类, 请 require('events').EventEmitter
。
当一个 EventEmitter
的实例遇到错误时,典型的动作是触发一个 'error'
事件。在 Node 中,错误事件被视为特殊情况,如果没有监听它,默认会打印一个错误堆栈并退出程序。
所有 EventEmitter 的实例在添加新的监听器时都会触发 'newListener'
事件。
给指定事件添加新的监听器,添加后位于监听器数组末端。
server.on('connection', function (stream) {
console.log('someone connected!');
});
给事件监听器一次 。该监听器仅在事件被触发后调用一次,然后它会被删除。
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
从指定事件的监听器数组删除单个监听器。注意:会改变该监听器数组的索引。
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
删除指定事件的所有监听器。
默认情况下,添加超过 10 个监听器时 EventEmitters 会打印一条警告信息。这个默认设置有助于发现内存泄漏。显然,10 个监听器不一定够用,此函数允许放宽这一限制。设置为 0 表示不作限制。
返回指定事件的监听器数组。该数组可以在运行时操作,比如删除监听器。
server.on('connection', function (stream) {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')); // [ [Function] ]
用提供的参数按(数组中的)顺序执行监听器。
function (event, listener) { }
添加新的监听器时触发此事件。