NodeJS基础入门-Event
大多数Node.js核心API都采用惯用的异步事件驱动架构,其中某些类型的对象(触发器)会周期性地触发命名事件来调用函数对象(监听器)。
例如,net.Server对象会在每次有新连接时触发事件;fs.ReadStream会在文件被打开时触发事件;流对象会在数据可读时触发事件。
所有能触发事件的对象都是EventEmitter类的实例。eventEmitterr.on()函数,允许将一个或多个函数绑定到会被对象触发的命名事件上。事件名称通常是驼峰式的字符串,但也可以使用任何有效的JavaScript属性名。
当EventEmitter对象触发一个事件时,所有绑定在该事件上的函数都被同步地调用。监听器的返回值会被丢弃。
例子,一个绑定了一个监听器的EventEmitterr实例。eventEmitter.on()方法用于注册监听器,eventEmitter.emit()方法用于触发事件。
const EventEmitter = require('events');
class CustomEvent extends EventEmitter {
}
const ce = new CustomEvent();
ce.on('test', ()=>{
console.log('This is a test!')
});
setInterval(() => {
ce.emit('test')
},500);
不停的触发这个事件:
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
^C
Error错误信息打印
const EventEmitter = require('events');
class CustomEvent extends EventEmitter {
}
const ce = new CustomEvent();
ce.on('error', err =>{
console.log(err)
});
ce.emit('error',new Error('oops!'));
Error: oops!
at Object. (/home/dex/web/nodejs/event.js:12:17)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
1544412983835
监听并触发结果,只调用一次
const EventEmitter = require('events');
class CustomEvent extends EventEmitter {
}
// 只调用一次
const ce = new CustomEvent();
ce.once('test', () =>{
console.log('test event');
});
setInterval(() => {
ce.emit('test')
}, 500);
test event
移除事件:
class CustomEvent extends EventEmitter {}
function fn1() {
console.log('fn1');
}
function fn2() {
console.log('fn2')
}
const ce = new CustomEvent();
ce.on('test', fn1); //可以绑定多个方法
ce.on('test', fn2);
setInterval(() => {
ce.emit('test');
},500);
setTimeout(() => {
// ce.removeListener('test',fn2); //移除fn2
ce.removeAllListeners('test'); //移除所有事件
}, 2000);
fn1
fn2
fn1
fn2
fn1
fn2
^C
NodeJS基础入门-Event的更多相关文章
- 02 nodejs命令参数(NodeJS基础入门)
声明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 建议使用开发软件:webstorm或hbuil ...
- 边走边学Nodejs (基础入门篇)
1.什么是Node.js Nodejs ,或者node, 是一个基于ChromeJavaScript执行时建立的平台.用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非堵 ...
- NodeJS基础入门
1.前端最主流的JavaScript运行环境 1>Node.js是一个基于Chrome V8引擎的JavaScript运行环境. 2>Node.js使用了一个事件驱动.非阻塞式I/O的模型 ...
- NodeJS基础入门-fs文件系统
文件I/O是由简单封装的标准POSIX函数提供.通过require('fs') 使用该模块.所有的方法都有异步和同步的形式. 异步方法的最后一个参数都是一个回调函数.传给回调函数的参数取决于具体方法, ...
- NodeJS基础入门-Buffer
Buffer.byteLength console.log(Buffer.byteLength('test')); console.log(Buffer.byteLength('我是C语言爱好者')) ...
- osgEarth基础入门
osgEarth基础入门 2015年3月21日 16:19 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件 ...
- Swift语法基础入门四(构造函数, 懒加载)
Swift语法基础入门四(构造函数, 懒加载) 存储属性 具备存储功能, 和OC中普通属性一样 // Swfit要求我们在创建对象时必须给所有的属性初始化 // 如果没办法保证在构造方法中初始化属性, ...
- osgEarth基础入门(转载)
osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...
- Mongoose基础入门
前面的话 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具.本文将详细介绍如何使用Mongoose来操作MongoDB NodeJS驱动 在介绍Mongoose之 ...
随机推荐
- SWT的基本组件使用
1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...
- jmeter的Include Controller控件和Test Fragment控件和Module Controller控件
1.Include Controller控件——给当前jmeter脚本引入外部片段的jmeter脚本(Test Fragment片段脚本) Include Controller控件——添加外部jmet ...
- 利用Hough变换识别图像中的直线
引入 近期看到2015年数学建模A题太阳影子定位中的第四问,需要根据附件中视频里的直杆的太阳影子的变化确定拍摄地点.其实确定拍摄地点这个问题并不是十分困难,因为有前三问的铺垫,我们已经得出了太阳影子长 ...
- window.location.origin兼容问题
if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + ...
- fstream类总结
- ofstream, ifstream, fstream 在头文件fstream中,在fstream类中,用open成员函数打开文件,实现类与文件的关联操作. - open(filename, mo ...
- 转 db_file_multiblock_read_count
http://www.laoxiong.net/table_scan_and_buffer_cache.html 全表扫描与buffer cache https://www.cnblogs.com/R ...
- 040 Combination Sum II 组合总和 II
给定候选号码数组 (C) 和目标总和数 (T),找出 C 中候选号码总和为 T 的所有唯一组合.C 中的每个数字只能在组合中使用一次.注意: 所有数字(包括目标)都是正整数. 解决方案集不 ...
- Oracle更新表字段时内容中含有特殊字符&的解决方法
今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...
- log4j.properties错误及配置详解
当在Eclipse上运行MapReduce程序遇到以上问题时,请检查项目中是否有log4j.properties配置文件,或者配置文件是否正确. 刚接触Hadoop的时候不太了解log4j.prope ...
- GIT主要用到的命令
git add . //添加到暂存盘 git commit -m ‘备注’//提交到本地仓库 git push //提交到远程仓库 fetch更新本地仓库两种方式: //方法一 $ git fetch ...