zoukankan      html  css  js  c++  java
  • 关于事件的一点小总结

      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()等。

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

  • 相关阅读:
    131. 分割回文串
    博客开通第二十七天
    博客开通第三十八天
    博客开通第56天
    博客开通第三十三天
    博客开通第61天
    博客开通第62天
    博客开通第二十六天
    博客开通第四十七天
    博客开通第63天
  • 原文地址:https://www.cnblogs.com/yilinfengluo/p/4687905.html
Copyright © 2011-2022 走看看