- 第1节:Node.js 教程
- 第2节:Node.js 安装配置
- 第3节:Node.js 创建第一个应用
- 第4节:Node.js NPM 使用介绍
- 第5节:Node.js REPL(交互式解释器)
- 第6节:Node.js 回调函数
- 第7节:Node.js 事件循环
- 第8节:Node.js EventEmitter
- 第9节:Node.js Buffer(缓冲区)
- 第10节:Node.js Stream(流)
- 第11节:Node.js 模块系统
- 第12节:Node.js 函数
- 第13节:Node.js 路由
- 第14节:Node.js 全局对象
- 第15节:Node.js 常用工具util
- 第16节:Node.js 文件系统
- 第17节:Node.js GET/POST请求
- 第18节:Node.js 工具模块
- 第19节:Node.js Web 模块
- 第20节:Node.js Express 框架
- 第21节:Node.js RESTful API
- 第22节:Node.js 多进程
- 第23节:Node.js JXcore 打包
- 第24节:Node.js 连接 MySQL
- 第25节:Node.js 连接 MongoDB
- 第26节:关于 Node.js
- 第27节:Node.js 示例
- 第28节:Node.js 断言测试
- 第29节:Node.js 事件
- 第30节:Node.js Punycode
- 第31节:Node.js Buffer
- 第32节:Node.js 文件系统
- 第33节:Node.js Query Strings
- 第34节:Node.js C/C++ 插件
- 第35节:Node.js 逐行读取
- 第36节:Node.js 全局对象
- 第37节:Node.js 子进程
- 第38节:Node.js REPL
- 第39节:Node.js HTTP
- 第40节:Node.js 集群
- 第41节:Node.js Smalloc
- 第42节:Node.js HTTPS
- 第43节:Node.js 控制台
- 第44节:Node.js 模块
- 第45节:Node.js 加密
- 第46节:Node.js 流
- 第47节:Node.js 网络
- 第48节:Node.js 调试器
- 第49节:Node.js 字符串解码器
- 第50节:Node.js 系统
- 第51节:Node.js DNS
- 第52节:Node.js 定时器
- 第53节:Node.js 路径
- 第54节:Node.js 域
- 第55节:Node.js TLS/SSL
- 第56节:Node.js 进程
- 第57节:Node.js TTY
- 第58节:Node.js UDP/Datagram
- 第59节:Node.js URL
- 第60节:Node.js 实用工具
- 第61节:Node.js 虚拟机
- 第62节:Node.js ZLIB
Node.js 事件
文档: 4 - API 冻结
Node里很多对象会分发事件: 每次有连接的时候net.Server
会分发事件,当文件打开的时候fs.readStream
会分发事件。所有能分发事件的对象都是 events.EventEmitter
的实例。通过require("events");
能访问这个模块。
一般来说,事件名都遵照驼峰规则,但这不是强制规定,任何形式的字符串都可以做为事件名。
为了处理事件,通常将函数关联到对象上。这些函数也叫监听者(listeners)。在这个函数里,this
指向监听者所关联的EventEmitter
。
类: events.EventEmitter
你可以通过require('events').EventEmitter
获取EventEmitter类。
EventEmitter
实例遇到错误后,通常会触发一个错误事件。错误事件在node里是特殊例子。如果没有监听者,默认的操作是打印一个堆栈信息并退出程序。
当添加新的监听者时, EventEmitters会触发'newListener'
事件,当移除时会触发'removeListener'
。
emitter.addListener(event, listener)
emitter.on(event, listener)
添加一个监听者到特定event
的监听数组的尾部,触发器不会检查是否已经添加过这个监听者。 多次调用相同的event
和listener
将会导致listener
添加多次。
server.on('connection', function (stream) {
console.log('someone connected!');
});
返回emitter。
emitter.once(event, listener)
给事件添加一个一次性的listener,这个listener只会被触发一次,之后就会被移除。
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
返回emitter。
emitter.removeListener(event, listener)
从一个某个事件的listener数组中移除一个listener。注意,这个操作会改变listener数组内容的次序。
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
removeListener
最多会移除数组里的一个listener。如果多次添加同一个listener到数组,那就需要多次调用removeListener
来移除每一个实例。
返回emitter。
emitter.removeAllListeners([event])
移除所有的listener,或者某个事件listener。最好不要移除全部listener,尤其是那些不是你传入的(比如socket或文件流)。
返回emitter。
emitter.setMaxListeners(n)
默认情况下,给单个事件添加超过10个listener,事件分发器会打印警告。这样有利于检查内存泄露。不过不是所有的分发器都应该限制在10个,这个函数允许改变 listener数量,无论是0还是更多。
返回emitter。
EventEmitter.defaultMaxListeners
emitter.setMaxListeners(n)
设置一个分发器的最大listener数,而这个函数会立即设置所有EventEmitter
的当前值和默认值。要小心使用。
请注意,emitter.setMaxListeners(n)
的优先级高于EventEmitter.defaultMaxListeners
.
emitter.listeners(event)
用于返回事件的listener数组。
server.on('connection', function (stream) {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection'))); // [ [Function] ]
emitter.emit(event[, arg1][, arg2][, ...])
允许你使用指定的参数顺序的执行每一个listener.
如果事件有 listener,返回true
, 否则false
类方法: EventEmitter.listenerCount(emitter, event)
返回指定事件的listener数量。
Event: 'newListener'
event
{String}事件名listener
{Function}事件处理函数
添加listener的时候会触发这个事件。当这个事件触发的时候,listener可能还没添加到listener数组。
Event: 'removeListener'
event
{String}事件名listener
{Function}事件处理函数
删除listener的时候会触发这个事件。当这个事件触发的时候,listener可能还还没从listener数组移除。