nodejs笔记二(事件模块)

原创 夏天不做梦 随笔 Nodejs 209阅读 2017-05-27 18:54:07 举报

node events 事件模块

// 引入events模块的EventEmitter
var EventEmitter = require("events").EventEmitter;
// 实例化
var lift =new EventEmitter();
// 监听事件
lift.on('事件名称',function(a, b, c){
console.log("事件1被触发了"+a+b+c);
});
lift.on('事件名称',function(a, b, c){
console.log("事件2被触发了"+a+b+c);
});

lift.emit('事件名称','111','222', '333');

lift.on(事件x, 监听函数);
建立监听事件,当这个事件x触发则执行监听函数

lift.on.emit(事件x, 参数1-n...);
用来触发事件x 然后将参数按顺序传给监听函数

lift.addListener(event, 函数名)
建立事件监听俗称监听器

lift.on(event, 函数名)
同上

lift.once(event, 函数名)
建立一次性事件监听 执行函数后删除

lift.removeListener(event, 函数名)
从指定事件中除去某一个监听函数,说白了就是再触发这个事件,指定的监听函数不执行了。

lift.removeAllListeners(event)
删除所有对这个事件的监听函数,说白了就是再触发这个事件,没函数执行了

lift.setMaxListeners(n)
设置这个lift实例的最大事件监听数,默认是10个,设置0为不限制

lift.listeners(event)
返回这个事件的监听函数的数组,例如返回:[function1, function2, function3],
修改会改变此事件的监听函数,
例如lift.listeners(event).length = 2;
就相当于执行了 lift.removeListener(event, function3) ;

具体这个事件监听用在哪些场景中呢?
比如有一个秒杀活动,只有第一个点击按钮的人才有机会获取奖品,网站会记录本次活动有多少人点击这个按钮,同时又要根据用户ID记录此用户点过多少次这个按钮。
不使用事件监听代码可能这么写:

var prize=false; //false表示奖品未被领取
var isactive = true; //活动是否开启
if(有人点击抽奖按钮){
if(!isactive ) return false; //先判断活动是否已经关掉了
if(!prize){
getprize(此人id, 按钮id); //getprize是领奖的方法
prize = true;
}
addbutton(此人id, 按钮id); //此按钮点击统计+1
addclick(此人id, 按钮id); //此人点击此按钮统计+1
}
setTimeout(function(){
isactive = false;
}, 10006060*24); //活动时间1天,1天以后活动结束

如果用事件监听改写上面代码,看上去更清晰,而且可能效率更高一些。

var events = require("events");
var btclick =new events.EventEmitter();
btclick.once('bt0click',getprize) //getprize是领奖的方法,触发一次后,自动删除本触发器
btclick.on('bt0click', addbutton);//此按钮点击统计+1
btclick.on('bt0click', addclick);//此人点击此按钮统计+1
if(有人点击抽奖按钮){
btclick.emit('bt0click', 此人ID, 按钮ID);//等于触发了bt0click事件的所有监听器
}
setTimeout(function(){
btclick.removeAllListeners('bt0click'); //移除所有监听器
}, 10006060*24); //活动时间1天,1天以后活动结束

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复