前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nodejs模块当中的事件(events)

Nodejs模块当中的事件(events)

作者头像
用户1272076
发布2019-03-26 16:52:21
9710
发布2019-03-26 16:52:21
举报
文章被收录于专栏:张培跃

张培跃

ID:laozhangsishu

不止于前端

关注

因为在node当中的大部分功能模块都依赖了events,所以events模块是Nodejs当中非常重要的模块之一。events对外暴露的是一个class即EventEmitter。EventEmitter的作用有两个,分别是对事件的监听与发射。

1、实现on和emit

自定义一个方法,输出的内容为“我很帅”。通过event当中的on与emit来实现对事件的监听与发射。

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
//触发名字叫做start的自定义事件
even.emit("start");
给事件传值

输出的结果为“我很帅!怎么办,怎么办?”

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(str){
    console.log("我很帅!"+str);
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
//触发名字叫做start的自定义事件
even.emit("start","怎么办,怎么办?");
emit可以触发多次

以下代码,在上面代码的基础上多发射了一次。你会发现“我很帅”被输出二次!

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
//触发名字叫做start的自定义事件
even.emit("start");
even.emit("start");
通过on定义名字相同的监听

结果会输出"我很帅!我很苦恼!"。说明监听事件名字相同,调用一次,均会执行!

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
function ev2(){
    console.log("我很苦恼!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
even.on("start",ev2);
//触发名字叫做start的自定义事件
even.emit("start");
2、once方法

通过这个方法的名字,你可能已经猜到这个方法的作用了!没错它的作用就是当你多次触发emit时,只会执行一次。也就是当你执行一次事件后将会从对应关系中移除掉。 以下代码虽然被多次emit,但只会输出一次"我很帅”

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.once("start",ev1);
//触发名字叫做start的自定义事件
even.emit("start");
even.emit("start");
3、removeListener

通过该方法可以移除指定的监听事件。以下代码最后一次emit时无效!

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
//触发名字叫做start的自定义事件
even.emit("start");
//移除事件名字为start,方法为ev1的监听
even.removeListener("start",ev1);
even.emit("start");
4、removeAllListeners

移除所有的监听事件。执行后你会发现啥也没有输出!

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("我很帅!");
}
function ev2(){
    console.log("我还很有才!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
even.on("start",ev2);
//触发名字叫做start的自定义事件
//移除所有事件名字为start的监听
even.removeAllListeners("start");
even.emit("start");
5、eventNames

eventNames方法可以罗列出已注册的所有监听器的事件,类型为数组

代码语言:javascript
复制
//引入events模块
const EventEmitter = require("events");
//myEmitter继承EventEmitter类
class myEmitter extends EventEmitter{};
//实例化对象
var even=new myEmitter();
//自定义一个函数
function ev1(){
    console.log("开始!");
}
function ev2(){
    console.log("结束!");
}
//通过实例化对象event的on方法,自定义一个start的监听事件
even.on("start",ev1);
even.on("over",ev2);
console.log(even.eventNames());//[ 'start', 'over' ]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、实现on和emit
    • 给事件传值
      • emit可以触发多次
        • 通过on定义名字相同的监听
        • 2、once方法
        • 3、removeListener
        • 4、removeAllListeners
        • 5、eventNames
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档