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

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

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/yilinfengluo/p/4687905.html
Copyright © 2011-2022 走看看