node events组件使用

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");

猜你喜欢

转载自blog.csdn.net/chijiajing/article/details/83344306
今日推荐