nodejs events,node events
本文将带您了解Node.js中的事件模块,并介绍事件中的发布和订阅模式。希望对你有帮助!
node.js速度课程简介:进入学习
Events模块
Events模块是Node最重要的模块,它提供了一个属性EventEmitter。EventEmitter的核心是事件发射和事件监听器。
Node的大多数模块都是从Events模块继承而来的。
事件模块是发布订阅模式(发布/订阅)按节点的实现。一个对象通过这个模块将消息传递给另一个对象。该模块通过EventEmitter属性提供一个构造函数。此构造函数的实例有一个on方法,可用于侦听指定的事件并触发回调函数。任何对象都可以发布指定的事件,该事件由EventEmitter实例的on方法监视。
发布订阅模式
关于事件中的发布订阅模式,首先要知道它的几种常用方法。
订阅方法:on方法用于订阅事件。订阅是将方法对应到一对多关系。发布方法:emit用来执行订阅的事件。取消订阅:off方法可以删除相应的事件监控。订阅一次:一次绑定事件在执行时自动删除订阅的事件。
on 和 emit
on方法的第一个参数用来设置类名,第二个参数也是一个函数,发布时可以接收传入的参数。
emit方法第一个参数是类名,后面的参数是传递给on方法函数的参数。
和emit可以参考下面简单演示。
const event emitter=require( events );
//自定义构造函数
函数Cat() {}
//原型继承需要通过实例调用继承方法
object . setprototypeof(cat . prototype,event emitter . prototype);
let Cat=new Cat();
const sleep=(a,b)={
Console.log(a, sleep );
};
const eat=(a,b)={
Console.log(b,吃);
};
Cat.on(猫,睡眠)
Cat.on(猫,吃)
setTimeout(()={
//小胡子吃
//小胖仙子沉睡
Cat.emit(猫,小胖仙女,小胡子)
}, 1000);现在我们可以实现一组on和emit方法。
函数EventEmitter() {
这个。_event={}
}
//on方法
event emitter . prototype . on=function(event name,callBack) {
如果(!这个。_event) {
这个。_event={}
}
如果(这个。_event[eventName]) {
这个。_ event[事件名称]。push(callback)//相当于{eventName:[fn1,fn2]}
}否则{
这个。_ event[event name]=[回调];//相当于{eventName:[fn1]}
}
}
//发出方法
event emitter . prototype . emit=function(event name,args) {
这个。_ event[事件名称]。forEach(fn={
fn(.参数)
});
}
off
off方法的第一个参数用来设置类名,第二个参数传入需要移除的函数回调中。
//.
setTimeout(()={
//小胡子吃
//小胖仙子沉睡
Cat.emit(猫,小胖仙女,小胡子)
Cat.off(猫,睡觉);
//小胡子吃
Cat.emit(猫,小胖仙女,小胡子)
}, 1000);这样,我们就可以大致判断并移除与我们传入的函数相同的函数,我们很快就想到了filter方法。
//off方法
event emitter . prototype . off=function(event name,callBack) {
如果(这个。_event this。_event[eventName]) {
这个。_event[eventName]=this。_ event[事件名称]。过滤器(
fn=fn!==回调fn.c!==回调//fn.c参考下面的once方法实现。
)
}
}
once
once方法的第一个参数用来设置类名,第二个参数传入只需要执行一次的函数回调中。
//.
const destruction=()={
Console.log(“拆除”);
}
Cat.once (cat ,演示)
setTimeout(()={
//.拆掉房子。
Cat.emit(猫,小胖仙女,小胡子)
}, 1000);这样我们就可以按照前面on和off的实现来实现这个方法了。
//once方法
event emitter . prototype . once=function(event name,callBack) {
const one=()={
回调();
this.off(eventName,one);
}
this.on(eventName,one);
}这个方法好像没什么问题,执行起来都是正确的。
然而,在一个特殊的情况下,仍然有一个错误。
在这种情况下,如果我们在执行之前已经通过off方法移除了once方法。
我们实现的方法不能满足这个要求,所以还需要对once方法做一些修改(off方法已经处理过了)。
添加自定义属性来“缓存”该函数。
event emitter . prototype . once=function(event name,callBack) {
const one=()={
//.
}
one.c=回调;//自定义属性
//.
}所以我们实现了once方法。
更多关于node的信息,请访问:nodejs教程!以上是Node.js学习的Events模块的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。