Node.js v0.10.31API手册-事件

Node.js v0.10.31API手册-目录

Events(事件)

Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,
一个fs.readStream对象会在文件被打开的时候发出一个事件。
所有这些产生事件的对象都是events.EventEmitter的实例。
你可以通过require("events")来访问该模块。

通常,事件名是驼峰命名 (camel-cased) 的字符串。不过也没有强制的要求,任何字符串都是可以使用的。

为了处理发出的事件,我们将函数
(Function) 关联到对象上。 我们把这些函数称为 监听器 (listeners)。 在监听函数中 this 指向当前监听函数所关联的EventEmitter 对象。

类: events.EventEmitter

通过require(‘events‘).EventEmitter 获取
EventEmitter 类。

当 EventEmitter 实例遇到错误,通常的处理方法是产生一个‘error‘ 事件,node
对错误事件做特殊处理。 如果程序没有监听错误事件,程序会按照默认行为在打印出 栈追踪信息 (stack trace) 后退出。

所有EventEmitter
会在添加 listener 时触发‘newListener‘事件,删除
listener 时触发 ‘removeListener‘ 事件。

emitter.addListener(event, listener)

emitter.on(event, listener)

添加一个 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 数组中在当前 listener 后的listener 的位置下标。

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

返回 emitter,方便链式调用。

emitter.removeAllListeners([event])

删除所有 listener,或者删除某些事件 (event) 的 listener。

返回
emitter,方便链式调用。

emitter.setMaxListeners(n)

在默认情况下,EventEmitter 会在多于 10 个 listener 监听某个事件的时候出现警告,此限制在寻找内存泄露时非常有用。 显然,也不是所有的 Emitter 事件都要被限制在 10 个 listener 以下,在这种情况下可以使用这个函数来改变这个限制。设置0为没有限制。

emitter.listeners(event)

返回指定事件的 listener 数组。

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

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

使用提供的参数按顺序执行指定事件的 listener。

若事件有
listeners 则返回 true 否则返回 false 。

类方法: EventEmitter.listenerCount(emitter, event)

返回指定事件的 listeners 个数。

事件: ‘newListener‘

  • event String 事件名
  • listener Function事件处理函数

在添加 listener 时会发生该事件。 此时无法确定 listener 是否在 emitter.listeners(event)返回的列表中。

事件: ‘removeListener‘

  • event String 事件名
  • listener Function 事件处理函数

在移除 listener 时会发生该事件。 此时无法确定 listener 是否在emitter.listeners(event)返回的列表中。

时间: 2024-10-10 04:19:15

Node.js v0.10.31API手册-事件的相关文章

Node.js v0.10.31API手册-Domain

Node.js v0.10.31API手册-目录 Domain(域) Domains 提供了一种方式,即以一个单一的组的形式来处理多个不同的IO操作.如果任何一个注册到domain的事件触发器或回调触发了一个'error'事件,或者抛出一个错误,那么domain对象将会被通知到.而不是直接让这个错误的上下文从`process.on('uncaughtException')'处理程序中丢失掉,也不会致使程序因为这个错误伴随着错误码立即退出. 警告: 不要忽视错误! Domain error处理程序

Node.js v0.10.31API手册-DNS

原API变化,故译文与之前译文样式上有所不同 Node.js v0.10.31API手册-目录 DNS 使用 require('dns') 引入此模块.dns 模块中的所有方法都使用了 C-Ares,除了 dns.lookup 使用了线程池中的 getaddrinfo(3).C-Ares 比 getaddrinfo 要快得多,但系统解析器相对于其它程序的操作要更固定.当一个用户使用 net.connect(80, 'google.com') 或 http.get({ host: 'google.

Node.js v0.10.31API手册-目录

这段时间,想找些新的技术学习学习,看上了Node.js,万丈高楼平地起,这就从它的API开始,然后就顺便翻译一下. Node.js v0.10.31API手册-简介 Node.js v0.10.31API手册-断言 Node.js v0.10.31API手册-Buffer Node.js v0.10.31API手册-Addons插件 持续更新中...

Node.js v0.10.31API手册-集群

集群 单个 Node 实例运行在单个线程中.要发挥多核系统的能力,用户有时候需要启动一个 Node 进程集群来处理负载. 集群模块允许你方便地创建一个共享服务器端口的进程网络. var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0;

Node.js v0.10.31API手册-子进程

子进程 Node 通过 child_process 模块提供了类似 popen(3) 的处理三向数据流(stdin/stdout/stderr)的功能. 它能够以完全非阻塞的方式与子进程的 stdin.stdout 和 stderr 以流式传递数据.(请注意,某些程序在内部使用行缓冲 I/O.这不会影响到 node.js,但您发送到子进程的数据不会被立即消费.) 使用 require('child_process').spawn()或者 require('child_process').fork

Node.js v0.10.31API手册-加密

加密(Crypto) 使用 require('crypto') 来调用该模块. crypto模块提供在HTTPS或HTTP连接中封装安全凭证的方法. 它提供OpenSSL中的一系列哈希方法,包括hmac.cipher.decipher.签名和验证等方法的封装. crypto.getCiphers() 返回一个数组,包含支持的加密算法的名字. 示例: var ciphers = crypto.getCiphers(); console.log(ciphers); // ['AES-128-CBC'

Node.js v0.10.31API手册-Addons插件

Addons Addons插件就是动态连接库.Addons插件将Node与C库和C++库链接起来.它的API(目前来说)相当复杂,涉及到了几个类库的知识. V8 JavaScript引擎是一个 C++ 类库..用于和JavaScript进行交互的接口.创建对象, 调用函数等. 文档大部分在这里:v8.h 头文件 (deps/v8/include/v8.h在Node源代码目录里), 也有可用的线上文档线上. libuv, C语言编写的事件循环类库.任何时候需要等待一个文件描述符变为可读状态,等待一

Node.js v0.10.31API手册-控制台

控制台 Object 用于向 stdout 和 stderr 打印字符.类似于大部分 Web 浏览器提供的 console 对象函数,在这里则是输出到 stdout 或 stderr. 当输出目标是一个终端或者文件时,console函数是同步的(为了防止过早退出时丢失信息).当输出目标是一个管道时它们是异步的(防止阻塞过长时间). 也就是说,在下面的例子中,stdout 是非阻塞的,而 stderr 则是阻塞的. $ node script.js 2> error.log | tee info.

Node.js v0.10.31API手册-Debugger

Debugger V8 提供了一个强大的调试器,可以通过 TCP 协议从外部访问.Node 内建了这个调试器的客户端.要使用调试器,以 debug 参数启动 Node,出现提示符: % node debug myscript.js < debugger listening on port 5858 connecting... ok break in /home/indutny/Code/git/indutny/myscript.js:1 1 x = 5; 2 setTimeout(functio