nodejs学习之events

在node里许多对象都发出事件:一个net.Server对象每次一个连接到来,都发出一个事件,一个fs.readStream对象在文件打开时放出一个事件.所有能放出事件的对象都是event.EventEmitter对象的实例.你可以这样做来访问这个模块:requre(‘events‘);
代表性的事件命名都是一个驼峰标识的字符串,然而这并不是一个强制约束,任何字符串都可以被接受.
函数可以被附加在对象上,并且当一个事件发出时被执行.这样的函数叫做监听函数.

Class:events.EventEmitter
可以这样访问events.EventEmitter类,require(‘events‘).EventEmitter.
当一个EventEmitter遇到一个错误时,典型的动作时发出一个error事件.在node里面,error事件将会被作为特殊情况处理,如果没有相应的监听函数,默认的动作是打印堆栈信息,然后退出程序.
当所有的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.listeners(event)获得的数组都将会无效.
emitter.setMaxListeners(n)
默认情况下,如果一个事件的监听函数超过10个,EventEmitters对象将会打印一个警告信息.这是一个发现内存溢出很有用的方法.很明显不是所有的Emitters对象都应该限制10个监听器.这个函数将会允许增加限制个数,如果不想限制个数,可以设置为0.
emitter.listeners(event)
返回指定事件的监听函数数组.
server.on(‘connection‘, function (stream) {
console.log(‘someone connected!‘);
});
console.log(util.inspect(server.listeners(‘connection‘))); // [ [Function] ]
在事件机制下,这个数组是易变的,会保持和事件的监听函数列表一直,然而,特定的动作(特别是removeAllListeners)将会是这个索引无效.
如果你需要在指定的时间获得一个不会改变的监听函数列表的copy,拿到一个副本,例如可以这么做:emitter.listeners(event).slice(0).
在node将来的release版本中,这个行为将会改变成总是返回一个不变的copy,在你的程序中,请不要依赖通过数组的函数来修改EventEmitters的监听函数.请总是使用‘on‘方法来添加一个新的监听.

emitter.emit(event,[arg1],[arg2],[...])
根据提供的参数列表来顺序执行每一个监听函数.

Event:‘newListener‘
event String,the event name,事件字符串,事件的名字.
listener function the event handler function 监听函数,事件处理函数.
当任何一个对象(支持发出事件的)添加一个新监听函数时,将会发出这个事件.

时间: 2024-12-13 21:01:48

nodejs学习之events的相关文章

nodejs学习之events的使用

实用events做个小例子: var mysql = require("mysql"); var Event = require("events").EventEmitter; var user = "lubingjie"; var pass = "123456"; var db = mysql.createConnection({host:"localhost",user:"root"

Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能----文件上传,示例以一个上传图片的功能为例子 上传功能命名用formidable实现,示例很简单! PS:最近比较忙,距上一次更新已经比较久了^_^! formidable简介 nodejs原生实现上传还是比较麻烦,有兴趣的自已去参考一下网上有网友写的代码 这里选择了formidable,也是githu

nodejs学习资料

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

NodeJS学习之2:express版的Hello World

接着 NodeJS学习之1:express安装 的结果: 我们继续应用程序的编写. 新建一个 app.js 文件 $ touch app.js copy 进去这些代码 // 这句的意思就是引入 `express` 模块,并将它赋予 `express` 这个变量等待使用. var express = require('express'); // 调用 express 实例,它是一个函数,不带参数调用时,会返回一个 express 实例,将这个变量赋予 app 变量. var app = expre

nodeJs学习

nodejsStudy 阅读<nodejs开发指南>来学习node.js的一个github仓库. 仓库里面放了这本书的电子版以及书籍的源代码 还放了node.js的最新win32的版本 node-v0.10.29 x86.msi 最后就是studyCase文件夹,存放着自己阅读书籍然后敲下来的学习案例 nodeJs学习,布布扣,bubuko.com

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n

nodejs学习一 Holle World

安装包下载:http://www.nodejs.org/download/ Windows 操作系统安装方法: 第一步:下载安装包: 第二步:运行node-v0.10.28-x86.msi,选择要安装的地址. 第三步:安装完后,运行cmd ,输入node,如图: 说明安装成功.这样你就进入nodejs 世界. 闪烁的光标等你输入. 第一个程序Hello World 就这么简单,你完成了人生第一次nodejs体验.console.log . 我们在换种方式来体验一下. 我们建立我们将要学习的一个目

nodejs学习笔记(基于v7.4.0)

nodejs学习笔记 一.buffer: 全局对象(单例   Buffer.from   Buffer.alloc   Buffer.allocUnsafe ) 编码类型 描述 ascii 仅仅用于7位ascall数据编码,速度快,如果设置了将会剥离高位 utf8 多字节的编码的Unicode字符,网页文档大部分默认都为它. utf16le 小端编码的Unicode字符,2或者4个字节 ucs2 utf16le的别名 base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之