const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {
console.log('触发事件');
});
myEmitter.emit('event');
 
 
=================================================================================================================
 
 
自己实现一个Nodejs中的event (发布、订阅模式):
function Events() {
//on的作用是定义一个handle对象,对象中eventName作为属性,callback推入这个属性数组中
this.on = function (eventName, callBack) {
 
//如果没有handles,就就新建一个handle对象
if (!this.handles) {
//首先定义了一个对象
this.handles = {};
}
//如果handles[eventName]没东西,那么handles[eventName] 是一个空数组
if (!this.handles[eventName]) {
this.handles[eventName] = [];
}
//讲callback推入数组
this.handles[eventName].push(callBack);
}
//emit的作用是找到hanlds对象中的handle[eventname] 然后传入参数并执行数组中所有方法
this.emit = function (eventName, obj) {
//遍历handles对象 ,将handles[eventName]数组中的callback传入obj参数并一一执行
if (this.handles[eventName]) {
for (var i = 0; i < this.handles[eventName].length; i++) {
this.handles[eventName][i](obj);
}
}
}
return this;
}
//设计模式
//发布-订阅模式
var event1 = new Events();
var event2 = new Events();
//handles 对象中hanlds['say']:[ function(){}...]
event1.on('say', function () {
console.log('Jony event1');
});
//handle 对象中handles['say']:{ }
event1.on('say', function () {
console.log('Jony event1+');
});
//handles 对象中handles['say']:[...]
event2.on('say', function () {
console.log('Jony event2');
})
event1.emit('say');
event2.emit('say');

node.js 中 events emitter 的实现(发布、订阅模式)的更多相关文章

  1. 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式

    搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...

  2. 初步揭秘node.js中的事件

    当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...

  3. Spring源码之七registerListeners()及发布订阅模式

    Spring源码之七registerListeners()及发布订阅模式 大家好,我是程序员田同学. 今天带大家解读refresh()方法中的registerListeners()方法,也就是我们经常 ...

  4. 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  5. 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    目录 Event Loop 是什么? Event Loop 基本解释 事件循环阶段概览 事件循环细节 timers pending callbacks poll阶段 check close callb ...

  6. 从发布订阅模式入手读懂Node.js的EventEmitter源码

    前面一篇文章setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop详细讲解了浏览器和Node.js的异步API及其底层原理Event Loop.本文会讲一下不 ...

  7. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

  8. node.js中对 redis 的安装和基本操作

    一.win下安装redis https://github.com/MicrosoftArchive/redis/releases 下载Redis-x64-3.2.100.zip,然后解压,放到自定义目 ...

  9. node.js中stream流中可读流和可写流的使用

    node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以 ...

随机推荐

  1. 洛谷——P3370 【模板】字符串哈希

    题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转 ...

  2. 对于startActivity的使用改进

    传统方式 一直以来,使用startActivity的方式就是例如以下: 比方从AActivity跳转到BActivity.那么我们是在AActivity中这样去写: Intent intent = n ...

  3. iOS AES的加密解密

    主要是要得到加密后的原来的字符创,MD5无法得到原有的,仅仅能用AES+base64 要用GTMBase64这个能够自己去下载, 主要看另外2个类文件. #import <Foundation/ ...

  4. Swift环境下实现UILabel居上 居中 居下对齐

    首先在Xcode中新建.h文件,将下面代码复制进去 // // myUILabel.h // // // Created by yexiaozi_007 on 3/4/13. // Copyright ...

  5. 一个使用sbt编译的JNI C++ 的模板

    假设你须要在Scala或是Java中调用C或C++函数库,就须要使用JNI. 这里就涉及到编译scala ,java 和C(C++)代码,在这里给出一个程序的框架,我们使用sbt 缺省的代码文件夹 文 ...

  6. HTML DOM getAttribute() 方法

    http://www.w3school.com.cn/jsref/met_element_getattribute.asp

  7. [poj 2912] Rochambeau 解题报告 (带权并查集)

    题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...

  8. Metasploit的armitage初步使用

      armitage的启动 root@kali:~# armitage 别急,过会儿就好了 .  等扫描完会弹出一个框框然后会多出目标的图标比如目标是打印机

  9. 继承—people

    public class People { private double height;//身高 private double weight;//体重 public double getHeight( ...

  10. @property 的本质是什么?

    将访问.变量.访问控制进行了绑定:编译器负责自动合成. @dynamic:不会自动合成成员变量和存取方法. @property 的本质是什么?@property = ivar + getter + s ...