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 ...
随机推荐
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
- 3ds max 渲染模型
有的模型因为法线方向问题,渲染的时候有的面缺失,只需要强制双面,如下图,就能把所有的面都渲染出来.
- js 固话正则
var str = '82386012'; var partten = /(^(0\d{2})-(\d{8})$)|(^(0\d{3})-(\d{7})$)|(^(0\d{2})-(\d{8})-(\ ...
- Lintcode 175. 翻转二叉树
-------------------- 递归那么好为什么不用递归啊...我才不会被你骗...(其实是因为用惯了递归啰嗦的循环反倒不会写了...o(╯□╰)o) AC代码: /** * Definit ...
- Particle System(粒子系统)
粒子系统应用:Unity的粒子系统可以制作烟雾,气流,火焰和各种大气效果. 粒子系统模块介绍: 大部分的属性可以通过曲线控制(见曲线编辑器),颜色属性可以被定义了颜色动画的渐变器控 ...
- 【DWR系列01】-DWR简介及入门例子
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- JavaOO面向对象中的注意点(三)
1.接口 a.关键字:interface public interface Serviceable{ //TODO } b.属性:只能是 公共 静态 常量 属性--就算不写这三个关键字,也是默认这种情 ...
- Eclipse导入到最新版Android Studio详解
说到使用AndroidStudio,除了新建的项目,我们都会面临的问题是原先Eclipse的代码该怎么导入到AndroidStudio中使用.这方面相关的资料还比较少,自己摸索了一下,总结出这篇博客, ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ
Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- Asp.net mvc页面传值-- dropdownlist
后台传值 List<ConfigParamInfo> paramList = configParamBLL.GetModelList(" and parentID=1" ...