关于事件的一点小总结
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()等。
注意:触发,和监听的对象要相同,如代码绿色提示部分。