Node.js 中文手册

中文翻译:www.nodecn.org 转载请注明出处

目录


事件

Node 中很多对象都会触发事件:net.Server 在每次建立新连接时触发事件,fs.readStream 在文件打开时触发事件。所有能触发事件的对象都是 events.EventEmitter 的实例。您可以通过 require("events"); 来访问此模块。

事件名称通常由驼峰式字符串表示,但这并不是强制要求,因为任何字符串都可以用作事件名称。

函数可以附加到对象,然后在事件触发时执行。这些函数被称为 监听器(listener)

events.EventEmitter

要访问 EventEmitter 类, 请 require('events').EventEmitter

当一个 EventEmitter 的实例遇到错误时,典型的动作是触发一个 'error' 事件。在 Node 中,错误事件被视为特殊情况,如果没有监听它,默认会打印一个错误堆栈并退出程序。

所有 EventEmitter 的实例在添加新的监听器时都会触发 'newListener' 事件。

emitter.addListener(event, listener)

emitter.on(event, listener)

给指定事件添加新的监听器,添加后位于监听器数组末端。

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

emitter.once(event, listener)

给事件监听器一次 。该监听器仅在事件被触发后调用一次,然后它会被删除。

server.once('connection', function (stream) {
  console.log('Ah, we have our first user!');
});

emitter.removeListener(event, listener)

从指定事件的监听器数组删除单个监听器。注意:会改变该监听器数组的索引。

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

emitter.removeAllListeners(event)

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

emitter.setMaxListeners(n)

默认情况下,添加超过 10 个监听器时 EventEmitters 会打印一条警告信息。这个默认设置有助于发现内存泄漏。显然,10 个监听器不一定够用,此函数允许放宽这一限制。设置为 0 表示不作限制。

emitter.listeners(event)

返回指定事件的监听器数组。该数组可以在运行时操作,比如删除监听器。

server.on('connection', function (stream) {
  console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')); // [ [Function] ]

emitter.emit(event, [arg1], [arg2], [...])

用提供的参数按(数组中的)顺序执行监听器。

'newListener' 事件

function (event, listener) { }

添加新的监听器时触发此事件。