events组件可以自定义事件
基本语法demo
//这是一个events模块例子
var events=require("events");
//实例化
var eventEmitter=new events.EventEmitter();
//自定义事件 第一个参数事件名,第一个是事件的方法
eventEmitter.addListener("demo1",function(){
console.log("这是自定义事件的方法,方法名叫demo1");
})
//调用自定义事件,第一个参数是需要调用的事件名,第二个是该调用事件的参数
eventEmitter.emit("demo1");
抽奖demo
/**
* 这是一个抽象的小Demo,用自定义事件
*/
//导入并实例化
var events=require("events");
var eventEmitter=new events.EventEmitter();
//定义一个记录购买次数的int
let buy=0;
//抽奖方法
function choujiang(){
//获取随机整数
var randomNum=parseInt(Math.random()*100);
console.log(randomNum);
//每次购买完继续购买次数+1
buy++;
//假如随机数大于95,那么中奖,停止此抽奖方法
if (randomNum>95) {
//调用自定义事件stopF,停止抽奖
eventEmitter.emit("stopF");
console.log("奖金100元,你花费了"+buy*10+"元");
}
}
//循环调用
var timer=setInterval(choujiang,500);
//自定义事件stopF,可以写成eventEmitter.on或者eventEmitter.addListener
eventEmitter.on("stopF",function(){
//停止循环事件
clearInterval(timer);
})
多个同名事件同时触发
/**
* 同时绑定多个事件demo
* @type {[type]}
*/
var events=require("events");
var eventsEmitter=new events.EventEmitter();
//事件的方法
function cb(a){
console.log("这是cb方法,这是cb方法的参数"+a)
}
//自定义事件
eventsEmitter.addListener("fun",cb);
//调用事件,事件名是fun,传bb的参数给此事件的方法
eventsEmitter.emit("fun","bb");
//开始绑定多个同名事件
//on跟addListener一样的,只是这里想偷懒而已
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.on("fun",function(){
console.log("同名方法");
});
eventsEmitter.addListener("fun",function(){
console.log("同名方法");
});
//开始再调用
//设置最大绑定数,默认为10
eventsEmitter.setMaxListeners(10);
//调用
eventsEmitter.emit("fun");
//listenerCount()的参数第一个是事件的名称,它会根据此事件名称记录本次调用了多少个
console.log("获得同名方法调用的总数"+eventsEmitter.listenerCount("fun"));
解除绑定
var events=require("events");
var eventEmitter=new events.EventEmitter();
//绑定事件(bindN)的方法
function cb(){
console.log(123);
}
//绑定事件
eventEmitter.addListener("bindN",cb);
eventEmitter.addListener("bindN",function(){
console.log("这是方法");
});
//调用事件
eventEmitter.emit("bindN");
//解除绑定,第一个参数是事件名,第二个参数是事件对应的方法名
eventEmitter.removeListener("bindN",cb);
//上面只是解除了事件的cb方法,还有一个默认的方法可以显示
eventEmitter.emit("bindN");