EventEmitter的基本用法:

  1. var EventEmitter = require("events").EventEmitter;
  2. var ee = new EventEmitter();
  3. ee.on("someEvent", function () {
  4. console.log("event has occured");
  5. });
  6.  
  7. ee.emit("someEvent");

emit方法可以触发多个同样的事件,比如我们的页面中绑定了多个同样的someEven事件。

  1. ee.on("someEvent", function () { console.log("event 1"); });
  2. ee.on("someEvent", function () { console.log("event 2"); });
  3. ee.on("someEvent", function () { console.log("event 3"); });
  4. ee.on("someEvent", function () { console.log("event 4"); });
  5. ee.on("someEvent", function () { console.log("event 5"); });
  6. ee.on("someEvent", function () { console.log("event 6"); });
  7. ee.on("someEvent", function () { console.log("event 7"); });
  8. ee.on("someEvent", function () { console.log("event 8"); });
  9. ee.on("someEvent", function () { console.log("event 9"); });
  10. ee.on("someEvent", function () { console.log("event 10"); });
  11. ee.on("someEvent", function () { console.log("event 11"); });
  12.  
  13. ee.emit("someEvent");

上面绑定的11个someEvent事件都会触发,但是控制台会有一条警告,因为事件对象默认监听的事件数量是10个,我们可以通过代码设置改变这个数值,例如:

  1. ee.setMaxListeners(20);

事件对象还有其他方法:

1,once()监听一次

2,removeListener , removeAllListeners() 移除监听事件/移除所有监听的事件

EventEmitter的高级用法:作为父类被其他类继承

比如在UserList.js文件中有UserList类

  1. var util = require("util");
  2. var EventEmitter = require("events").EventEmitter;
  3.  
  4. var id = 1;
  5. var database = {
  6. users: [
  7. { id: id++, name: "Joe Smith", occupation: "developer" },
  8. { id: id++, name: "Jane Doe", occupation: "data analyst" },
  9. { id: id++, name: "John Henry", occupation: "designer" }
  10. ]
  11. };
  12.  
  13. util.inherits(UserList, EventEmitter);
  14. /*或者这样
  15. function UserList () {
  16. EventEmitter.call(this);
  17. }*/
  18.  
  19. UserList.prototype.save = function (obj) {
  20. obj.id = id++;
  21. database.users.push(obj);
  22. this.emit("saved-user", obj);
  23. };
  24.  
  25. UserList.prototype.all = function () {
  26. return database.users;
  27. };
  28.  
  29. module.exports = UserList

现在我们可以在另外一个文件中这样写:

  1. var UserList = require("./userlist");
  2. var users = new UserList();
  3.  
  4. users.on("saved-user", function (user) {
  5. console.log("saved: " + user.name + " (" + user.id + ")");
  6. });
  7.  
  8. users.save({ name: "Jane Doe", occupation: "manager" });
  9. users.save({ name: "John Jacob", occupation: "developer" });
  1. //输出结果
  2. saved: Jane Doe (4)
  3. saved: John Jacob (5)

关于EventEmitter的用法的更多相关文章

  1. Node.js 学习(六)Node.js EventEmitter

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.read ...

  2. Node.js:EventEmitter

    概要:本篇博客主要介绍EventEmitter Node.js所有的异步I/O操作在完成时都会发送一个事件到事件队列.事件由EventEmitter对象提供.下面通过一个例子来说明EventEmitt ...

  3. Node.js EventEmitter

    Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有 ...

  4. 7、Node.js EventEmitter

    #######################################################################################介绍Node.js Eve ...

  5. 【node.js】事件循环、EventEmitter

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. 事件驱动程序 ...

  6. Node.js:EventEmitter类

    一.EventEmitter 类 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时 ...

  7. 19.Node.js EventEmitter

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里 ...

  8. node开发指南

    Node.js 能做什么 正如 JavaScript 为客户端而生,Node.js 为网络而生.Node.js 能做的远不止开发一个网站那么简单,使用 Node.js,你可以轻松地开发: 具有复杂逻辑 ...

  9. Node.js 事件

    Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...

随机推荐

  1. H5 Notes:PostMessage Cross-Origin Communication

    Javascript中要实现跨域通信,主要有window.name,jsonp,document.domain,cors等方法.不过在H5中有一种新的方法postMessage可以安全实现跨域通信,并 ...

  2. u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)

    本次移植跟以往的不同之处是采用了spl来引导u-boot,参考了博客http://blog.csdn.net/fulinus/article/details/42738641 下载链接:http:// ...

  3. WebComponent魔法堂:深究Custom Element 之 面向痛点编程

    前言  最近加入到新项目组负责前端技术预研和选型,一直偏向于以Polymer为代表的WebComponent技术线,于是查阅各类资料想说服老大向这方面靠,最后得到的结果是:"资料99%是英语 ...

  4. C# - 多线程 之 信号系统

    基础概览 多线程之信号系统命名空间 using System.Threading; 线程同步类的继承层次关系图 终止状态和非终止状态 在终止状态下,被WaitOne()阻塞的线程会逐个得到释放.如果一 ...

  5. 配置 EPEL yum 源

    当我们在linux上, 使用yum 安装包时,报错如下: Loaded plugins: product-id, refresh-packagekit, security, subscription- ...

  6. Scrapy开发指南

    一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy基于事件驱动网络框架 Twis ...

  7. Qt信号与槽自动关联机制

    参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...

  8. Linux:JDK配置

    1.JDK官网下载"jdk-8u101-linux-i586.tar.gz",32位或64位. 2 命令 #创建jdk所在目录 sudo mkdir /usr/lib/jvm #找 ...

  9. Struts2入门(四)——数据输入验证

    一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我 ...

  10. SQL Server游标(转)

    清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...