关于事件的一点小总结

  nodejs中很多对象具有监听和发送事件的功能,是因为继承了EventEmitter对象。

  总结的一点demo:

var  EventEmitter  =    require('events').EventEmitter;
var  util          =    require('util');

var  Client   =  function(id) {
      
    EventEmitter.call(this); //了解call的用法
    
     this.id = id;
     ....
                   
}; 

 util.inherits(Client, EventEmitter);

  绿色加粗的代码很重要。

  这样,Client的对象就可以发送和监听事件了。

  做个小例子,建一个Sender类,每隔1s创建一个sender对象,每个对象都监听一个send事件。三个对象之后,触发事件发生,就每隔1s输出自己的id。

  

var util            =   require('util');
var EventEmitter    =   require('events').EventEmitter;

var Sender  =   function(id){

    EventEmitter.call(this);

    this.id =   id;
};

util.inherits(Sender, EventEmitter);//继承EventEmitter,就是事件功能

var count   =   1;

var senderArr   =   [];
var inter_id = setInterval(function(){
    if(count < 3){
        var sender  =   new Sender(count++);
        console.log('sender count is ' + (count-1));

        sender.once('send', function(){  //监听事件,事件触发,开始执行监听器函数
            debugger;
            setInterval(function(){
                debugger;
                console.log('sender ' + sender.id);
            }, 1000);
        });
        senderArr.push(sender);  //添加进数组
    }else {
        debugger;
        senderArr.forEach(function(sender){
            sender.emit('send');//触发事件
        });
        debugger;
        clearInterval(inter_id);//清楚interval,需要指定id
        
    }
}, 1000);

有几个知识点:

  1. setInterval  和 clearInterval(id)

   setInterval()会返回一个id,删除这个interval需要这个id.

  2.数组的使用,以及遍历

   var senderArr  =  [];
   senderArr.push(sender);
   senderArr.forEach(function(client){

   });

  3.事件触发

   

sender.once('send', function() {
    ........
});

sender.emit('send');

 监听事件有一些方法,如on(),once()等。

注意:触发,和监听的对象要相同,如代码绿色提示部分。

原文地址:https://www.cnblogs.com/yilinfengluo/p/4687905.html