在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的更多相关文章

  1. nodejs学习之events的使用

    实用events做个小例子: var mysql = require("mysql"); var Event = require("events").Event ...

  2. NodeJS学习笔记 (21)事件机制-events(ok)

    模块概览 events模块是node的核心模块之一,几乎所有常用的node模块都继承了events模块,比如http.fs等. 模块本身非常简单,API虽然也不少,但常用的就那么几个,这里举几个简单例 ...

  3. Nodejs学习笔记(二)--- 事件模块

    目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...

  4. Nodejs学习路线图

    前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个.和所有人一样,我也从Web开发开始,然后到包管 理,再到应用系统的开发,最后开源自己的Nodejs项目 ...

  5. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  6. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  7. Nodejs学习笔记(二)——Eclipse中运行调试Nodejs

    前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...

  8. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  9. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

随机推荐

  1. 阿里云部署多个tomcat

    转载自:http://www.cnblogs.com/lhj588/p/3805268.html 同时支持windows阿里云服务器 部署前准备: 1.到阿里云官网购买一台服务器 2.给阿里云服务器挂 ...

  2. A页面调到B页面,B页面关闭时A页面刷新

    // A.html <html> <head> <script type="text/javascript"> alert("refr ...

  3. 配置ntp服务

    配置ntp服务(hadoop搭建可参考) 一:修改选定的服务器的本地时间 date -s '2016-10-07 16:29:30' +'%F %T' //需要设置的时间 二:修改后将时间写入到硬件时 ...

  4. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  5. windows系统 SVN出现 can't open file‘\XXX\txn-current-lock’ 拒绝访问 问题处理

    问题描述:  在新建的svn目录下,提交文件出现 如图错误提示.

  6. **crontab的使用方式介绍和no crontab for root 提示的处理

    crontab的使用方式介绍   定时任务参数详解如下:  crontab -l     |  crontab -e    www.2cto.com   #*/30 * * * * ntpdate 1 ...

  7. js对象克隆方法

    方法1: function clone(obj){ var o; switch(typeof obj){ case 'undefined': break; case 'string' : o = ob ...

  8. Ubuntu菜鸟入门(七)—— 微信安装

    一.安装git sudo apt-get install git 设置自己的用户名和密码 sudo git config --global user.name "ABC" sudo ...

  9. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  10. 转:解决apache的the requested operation has failed

    运行->cmd 进入到apache的bin目录.输入httpd.exe -w -n "Apache" -k start 可查看原因