事件驱动events

简介: 事件驱动events

文章目录

案列代码

const events = require("events");
var emitter = new events.EventEmitter();
const listener1=function(arg1,arg2){
    console.log("listener1",arg1,arg2);
};
const listener2 = function(arg1,arg2){
    // 默认传入this指向当前监听器
    console.log("listener2",arg1,arg2,this);
}
// 注册监听器1 
const em1 = emitter.on('someEvent',listener1);
// console.log(em1);
console.log("----");
// 注册监听器2 
const em2 = emitter.on('someEvent',listener2)
// console.log(em2);
console.log("----");
// 注册事件发射器
emitter.emit('someEvent','触发器',1991,res=>{
    console.log("发射事件1");
});
console.log("发射器1完毕");
// 解除监听器1
emitter.removeListener('someEvent',listener1,res=>{
    console.log("监听器一解除");
});
emitter.emit('someEvent','触发器',1991);
emitter.on('someEvent',(arg1,arg2)=>{
    console.log("listener3",arg1,arg2);
})

输出结果

PS D:\Codes\node> node "d:\Codes\node\11、事件发射器.js"
----
----
listener1 触发器 1991
listener2 触发器 1991 EventEmitter {
  _events: [Object: null prototype] {
    someEvent: [ [Function: listener1], [Function: listener2] ]
  },
  _eventsCount: 1,
  _maxListeners: undefined,
  [Symbol(kCapture)]: false
}
发射器1完毕
listener2 触发器 1991 EventEmitter {
  _events: [Object: null prototype] { someEvent: [Function: listener2] },
  _eventsCount: 1,
  _maxListeners: undefined,
  [Symbol(kCapture)]: false
}

代码解析

  • 回调问题

// 注册事件发射器 emitter.emit('someEvent','触发器',1991,res=>{ console.log("发射事件1"); });

// 解除监听器1 emitter.removeListener('someEvent',listener1,res=>{ console.log("监听器一解除"); });

通过输出结果可以发现事件的发射器,以上两个函数的回调都没有执行,由此可知,事件的发射器跟监听器的解除过程都不会涉及到事件的回调


  • this 指针

const listener1=function(arg1,arg2){ console.log("listener1",arg1,arg2); };

const listener2 = function(arg1,arg2){ // 默认传入this指向当前监听器 console.log("listener2",arg1,arg2,this); }

输出结果:

listener1 触发器 1991 listener2 触发器 1991 EventEmitter { _events: [Object: null prototype] { someEvent: [ [Function: listener1], [Function: listener2] ] }, _eventsCount: 1, _maxListeners: undefined, [Symbol(kCapture)]: false }

通过代码与输出结果的比对,我们发现监听器会默认带有this指针,指向当前的监听器的监听事件EventEmitter对象;

对象内的someEvent就是我们监听的事件,[Function: listener1], [Function: listener2] ],就是我们定义的两个监听器


  • 代码的实现

emitter.on('someEvent',(arg1,arg2)=>{ console.log("listener3",arg1,arg2); })

// 我们发现在事件发射器后面的监听器并不能监听到前面的事件发射。

相关文章
|
22天前
|
消息中间件 Unix Linux
【ZMQ polling机制】ZMQ异步接收机制以及与epoll/select的对比分析
【ZMQ polling机制】ZMQ异步接收机制以及与epoll/select的对比分析
114 0
|
22天前
|
缓存
2.1.2事件驱动reactor的原理与实现
2.1.2事件驱动reactor的原理与实现
|
8月前
|
存储 JavaScript API
39 # events 模块的实现原理
39 # events 模块的实现原理
16 0
|
11月前
|
移动开发 JavaScript 前端开发
Event Loop 事件循环简介
Event Loop 事件循环简介
109 0
|
中间件 Serverless
事件驱动(Event driven)
事件驱动(Event driven)自制脑图, 是函数计算的最重要的特质之一,正是由于函数计算和事件源的深度集成,使得函数计算服务成为处理云服务事件最便捷的一种方式,让用户无需自行搭建各类中间件,方便的构建使用云上各种能力的应用。 函数计算近期发布了异步调用目标功能,让函数计算不仅可以作为事件的消费者,也成为了事件的生产者。该功能还增强了异步执行函数的可观测性,让用户更方便的构建基于事件驱动的应用。
137 0
事件驱动(Event driven)
事件驱动(Event driven)——函数的异步调用方式总结
事件驱动(Event driven)——函数的异步调用方式总结自制脑图, 函数的异步调用方式有利于拉平负载,提高任务的成功率,但也带来了一系列挑战。我们结合用户的实际场景,可总结为下述几类:
126 0
事件驱动(Event driven)——函数的异步调用方式总结
事件驱动(Event driven)——事件驱动闭环
事件驱动(Event driven)——事件驱动闭环自制脑图
84 0
事件驱动(Event driven)——事件驱动闭环
|
Serverless
事件驱动(Event driven)——函数计算异步调用
事件驱动(Event driven)——函数计算异步调用自制脑图
74 0
事件驱动(Event driven)——函数计算异步调用
事件驱动(Event driven)——异步调用策略的可定制性
事件驱动(Event driven)——异步调用策略的可定制性自制脑图
61 0
事件驱动(Event driven)——异步调用策略的可定制性
|
JavaScript 前端开发 API
事件循环机制(Event Loop)的基本认知
事件循环机制(Event Loop)的基本认知
254 0
事件循环机制(Event Loop)的基本认知