nodejs事件

曾经终败给现在 2023-07-17 11:26 153阅读 0赞

事件简介

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

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

  1. const eventEmitter=require('events');
  2. class MyEmitter extends eventEmitter{ }
  3. const myEmitter=new MyEmitter();//能触发事件的对象都是 eventEmitter 的实例
  4. // 注册事件
  5. // 这些对象有个.on函数,可以将处理函数绑定到命名事件上
  6. myEmitter.on('event666',()=>{
  7. console.log("触发event666事件 001");
  8. })
  9. // 如果有多个绑定该事件的处理函数,则同步调用这些函数
  10. myEmitter.on('event666',function(para1,para2){
  11. console.log("触发event666事件 002:",para1,para2);
  12. })
  13. // 如果用.once这个函数,那么只会打印第一个发布的
  14. myEmitter.once('event666',function(){
  15. console.log("once 触发event666事件 003");
  16. })
  17. console.log("-----触发事件-------------");
  18. // 发布事件,什么位置发布,什么位置触发
  19. myEmitter.emit("event666");
  20. // 可以多次触发,还可以传递多个参数
  21. myEmitter.emit("event666","游戏","电影")
  22. myEmitter.emit("event666","音乐")

在这里插入图片描述

自定义事件

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

  1. // 用nodejs自定义一个事件,发布、订阅(注册)
  2. var Events={
  3. listens:{ },//想着用来存放所有的订阅事件
  4. on:function(event,callback){ // 定义一个on方法
  5. if(this.listens[event]){ // 第一次订阅,如果存在,将回调函数传入相关事件下的数组(模拟绑定处理函数)
  6. this.listens[event].push(callback);
  7. }else{
  8. this.listens[event]=[callback];// 如果这个命名事件不存在,就重新创建一个,并且绑定第一个事件处理函数
  9. }
  10. },
  11. emit:function(eventname){ //发布事件、触发事件
  12. // 循环同步调用绑定的处理函数
  13. for(let i=0;i<this.listens[eventname].length;i++){
  14. this.listens[eventname][i].call();//去调用执行
  15. }
  16. }
  17. }
  18. // 订阅这个事件
  19. Events.on('loginsuccess',()=>{
  20. console.log('已触发loginsuccess');
  21. })
  22. // 发布一个事件
  23. Events.emit('loginsuccess');

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

发表评论

表情:
评论列表 (有 0 条评论,153人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nodejs 事件驱动

    > 其实这是两部分内容 异步I/O  事件驱动  、 > > ——异步I/O就是nodejs是一个异步非阻塞语言  例如fs模块就能很好的理解。这里不多赘述 > > 今天主