EventEmitter事件触发器


EventEmitter事件触发器

Node 中的很多对象都会触发事件,例如:一个TCP 服务器在收发每个数据流时都触发事件;子进程在退出时 会触发事件。所有能够触发事件的对象都是events.EventEmitter 的实例。

事件命名方式使用大小写分隔的风格。例如:'stream', 'data', 'messageBegin'。 可以将函数注册给对象,使其在事件触发时执行, 此类函数被称作‘监听器‘。

通过调用require('events').EventEmitter, 我们可以使用EventEmitter(事件触发器)类。 当向EventEmitters(事件触发器)对象上注册新的时间监听器时,都会触发'newListener'事件。 当事件触发器过程中出现错误时,典型的处理方式是它将触发一个'error'事件。Error 事件的特殊性在于:如果 没有函数处理这个事件,它将会输出调用堆栈,并随之退出应用程序。

Event: 'newListener'

function (event, listener) { }

该事件在添加新监听器时被触发。

Event: 'error'

function (exception) { }

如果发生错误,'error'事件将会被触发。这是一个特殊事件,如果没有相应的监听函数监听这个事件, node 将 会结束应用程序的执行并显示异常堆栈。

emitter.on(event, listener)

向指定的事件监听器数组尾部添加一个新监听器。

server.on('stream', function (stream) {
console.log('someone connected!');
});

emitter.removeListener(event, listener)

从指定监听器数组中删除一个监听器。需要注意的是,此操作将会改变处于被删监听器之后的那些监听器的索 引。

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

emitter.removeAllListeners(event)

删除指定事件的所有监听器。

emitter.listeners(event)

返回指定事件的监听器数组。你可以操作数组的内容,比如说删除一个监听器。

server.on('stream', function (stream) {
console.log('someone connected!');
});
console.log(sys.inspect(server.listeners('stream'));
// [ [Function] ]
emitter.emit(event, [arg1], [arg2], [...])

使用所提供的参数,依次执行事件监听器数组中的每一个监听函数。