nodejs events,node events

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: