nodejs事件

事件简介

nodejs内置模块 events(事件触发器)
异步事件驱动,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。
所有能触发事件的对象都是 EventEmitter 类的实例。 这些对象有一个 eventEmitter.on() 函数,用于将一个或多个函数绑定到命名事件上。
当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都会被同步地调用。
常用的一个函数 events.once(emitter, name)

例子,一个简单的 EventEmitter 实例,绑定了一个监听器。 eventEmitter.on() 用于注册监听器, eventEmitter.emit() 用于触发事件。

const eventEmitter=require('events');

class MyEmitter extends eventEmitter{}
const myEmitter=new MyEmitter();//能触发事件的对象都是 eventEmitter 的实例

// 注册事件
// 这些对象有个.on函数,可以将处理函数绑定到命名事件上
myEmitter.on('event666',()=>{
    console.log("触发event666事件 001");
})
// 如果有多个绑定该事件的处理函数,则同步调用这些函数
myEmitter.on('event666',function(para1,para2){
    console.log("触发event666事件 002:",para1,para2);
})
// 如果用.once这个函数,那么只会打印第一个发布的
myEmitter.once('event666',function(){
    console.log("once 触发event666事件 003");
})
console.log("-----触发事件-------------");
// 发布事件,什么位置发布,什么位置触发
myEmitter.emit("event666");
// 可以多次触发,还可以传递多个参数
myEmitter.emit("event666","游戏","电影")
myEmitter.emit("event666","音乐")

在这里插入图片描述

自定义事件

这个小栗子只是简单流程,不支持参数传递,可以自行优化。

// 用nodejs自定义一个事件,发布、订阅(注册)
var Events={
    listens:{},//想着用来存放所有的订阅事件
    on:function(event,callback){// 定义一个on方法
        if(this.listens[event]){// 第一次订阅,如果存在,将回调函数传入相关事件下的数组(模拟绑定处理函数)
            this.listens[event].push(callback);
        }else{
            this.listens[event]=[callback];// 如果这个命名事件不存在,就重新创建一个,并且绑定第一个事件处理函数
        }
    },
    emit:function(eventname){//发布事件、触发事件
        // 循环同步调用绑定的处理函数
        for(let i=0;i<this.listens[eventname].length;i++){
            this.listens[eventname][i].call();//去调用执行
        }
    }
}

// 订阅这个事件
Events.on('loginsuccess',()=>{
    console.log('已触发loginsuccess');
})

// 发布一个事件
Events.emit('loginsuccess');

结果:
在这里插入图片描述
大师兄梳理流程:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值