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 监听函数,事件处理函数.
当任何一个对象(支持发出事件的)添加一个新监听函数时,将会发出这个事件.
nodejs学习之events的更多相关文章
- nodejs学习之events的使用
实用events做个小例子: var mysql = require("mysql"); var Event = require("events").Event ...
- NodeJS学习笔记 (21)事件机制-events(ok)
模块概览 events模块是node的核心模块之一,几乎所有常用的node模块都继承了events模块,比如http.fs等. 模块本身非常简单,API虽然也不少,但常用的就那么几个,这里举几个简单例 ...
- Nodejs学习笔记(二)--- 事件模块
目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...
- Nodejs学习路线图
前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个.和所有人一样,我也从Web开发开始,然后到包管 理,再到应用系统的开发,最后开源自己的Nodejs项目 ...
- Nodejs学习笔记(四)——支持Mongodb
前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
- NodeJS学习笔记之Connect中间件模块(一)
NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
随机推荐
- 【日记】搭建一个node本地服务器
用node搭建一个本地http服务器.首先了解htpp服务器原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型 ...
- 多个Class作用于同一个元素的结果分析
多个Class作用于同一个元素的结果分析 多个class作用于同一个元素出现样式冲突,因为权重相同,结果如何呢 [代码] <html> <head> <sty ...
- Ruby字符串
在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示.简单的字符串文本括在单引号中,如 'This is a simple Ruby string liter ...
- C# 操作excel单元格居中
C# 操作excel //导出Excel private void ExportExcel(string fileName, System.Data.DataTable myDGV, s ...
- ModPagespeed for Apache安装配置
1.安装ModPagespeed #32位wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i38 ...
- 获取url中指定的参数
function GetRequest(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(& ...
- day4
第八单元 1)使用cat命令进行文件的纵向合并 文件的写入 2)wc -l显示有多少行 3)管道符 "|"将上一个命令交给下一个命令的参数 4)归档tar c:创建一个新的tar文 ...
- [PHP]加密解密函数
非常给力的authcode加密函数,Discuz!经典代码(带详解) function authcode($string, $operation = 'DECODE', $key = '', $exp ...
- 用 CallerMemberName Attribute 和 EqualityComparer 统一处理类的属性值变化
当需要实现类似 INotifyPropertyChanged 这样的接口的时候,每一个属性去判断值是否变化,然后触发事件什么的,太麻烦了,如果能用一个方法统一处理就好了. 好在真的可以做到.这个博文说 ...
- Mac Android开发环境变量的配置(java、sdk、ndk、gradle)
1.打开terminal 2.然后输入 vi .bash_profile 后按"e"进入编辑模式 3.输入想要配置的环境变量(Java.sdk.ndk.gradle): expor ...