node.js和node,node是js吗
本文带你了解一下node中的EventEmitter,简单说说异步操作,错误事件,EventEmitter类。希望对你有帮助!
node.js速度课程简介:进入学习
events(事件触发器)
events是nodejs的内置事件触发器。node的许多内置模块都使用事件。例如,http.server每次收到请求时都会触发事件,stream使用on来根据事件的使用情况监听相应的事件。
所有触发事件的对象都是EventEmitter实例,它公开EventEmitter.on (event ,callback)。通常,EventTmitte.on用于注册事件,EventEmitter.emit触发事件。
示例:
const events=require( events );
const event=新事件();//实例化EventEmitter
event.on(data ,(a,b)={
Console.log(参数 a b)
console.log(this,“this”)
//注意,如果callback是一个箭头函数,这将指向全局对象。
//如果callback是function(){}的形式,这将绑定到EventEmitter实例。
Console.log(“发出触发了数据事件”)
})
event.emit(data ,1,2);//使用emit来触发事件异步操作
因为EventEmitter.on (event name ,callback)中的回调是同步执行的,但是有些情况下我们不得不使用异步操作,所以可以使用SetImmediate来执行异步操作。
const events=require( events );
const event=新事件();
event.on(event ,(a,b)={
setImmediate(()={
console.log(“这是异步发生的”);
});
//因为这里的监听器是同步执行的,所以我们可以使用setImediate函数来等待监听器中的其他内容被执行。
});
event.emit(event ,1,2);触发一次
当我们正常通过emit触发事件时,emit会多次触发几个事件,但是我们可以用once注册事件,用once触发的事件只能触发一次。
const event emitter=require( events );
const MyEventEmitter=new event emitter();
设a=0;
//正常注册事件和触发器
MyEventEmitter.on(add ,()={
a
console.log(a)
})
myeventemitter . emit( add );//1;
myeventemitter . emit( add );//2;
//注册一次
MyEventEmitter.once(add ,()={
a
console . log(a);
})
MyEventEmitter.emit(add) //1
MyEventEmitter.emit(add) //不再有效error事件
EventEmitter没有错误事件,只能在出错时强制退出执行,所以我们要自己注册一个错误事件,这样出错时就会触发错误事件。
const event emitter=require( events );
const MyEventEmitter=new event emitter();
MyEvenEmitter.on(error ,(err)={
Console.error(err,“已报告错误”)
})除了以上方式,我们还可以通过errorMonitor来监控emit触发的错误,而不需要注册错误事件。
有了errorMonitor,我们不需要手动注册错误事件。
const {EventEmitter,error monitor }=require( events );
const MyEventEmitter=new event emitter();
MyEventEmitter.on(errorMonitor,(err)={
console . log(err);
})
我的事件发射器(错误,新错误(错误))EventEmitter类
newListener事件
当我们添加事件监控时,newListener事件会被触发,所以我们可以注册newListener事件来做一些添加事件监控时的事情。
const { event emitter }=require( events );
const my event=new event emitter();
MyEvent.on(newListener ,(name,litener)={
//name是您正在收听的事件的名称。
//listener是事件的处理程序。
MyEvent.on(event ,()={
console . log( newListener中添加的事件)
})
})
MyEvent.on(event ,()={
Console.log(“正常注册的事件事件”)
})
//如果我们此时不触发event事件,就会执行newListener事件,因为只要我们在注册事件,就会触发newListener事件。
//注意:newListener事件必须用EventEmitter.once()注册,因为如果我们在newListener事件中添加注册事件,而外面又有多个注册事件,那么newListener事件就会被多次触发,就会发生堆栈溢出。
my event . emit(“event”);
//打印结果
//在newListener中注册的事件
//正常注册事件removeListener事件
removeListener事件用于删除已注册的事件,但removeListener不会阻止由emit触发的事件。
const callback=()={
console.log(B )
}
const callbackA=()={
console.log(A )
event.removeListener(data ,callbackB)
}
event.on(data ,callbackA)
event.on(data ,callbackB)
event . emit( data );//执行callbackA时数据被删除,但不会阻止触发器丢弃下一个发出。
event . emit( data );//addListener 和on的作用一样到了这里就真的删了。
eventNames
返回包含所有已注册事件名称的数组。
const { event emitter }=require( events );
const my event=new event emitter();
MyEvent.on(data ,()={ });
MyEvent.on(finish ,()={ });
console . log(my event . event names());
//打印结果
[数据,完成]getMaxListeners
返回可以注册的最大事件数。默认值为10。如果超过10个事件,将会出现警告。
但是我们可以通过setMaxListener(20)修改它
const { event emitter }=require( events );
const my event=new event emitter();
console . log(my event . getmax listener());//10
event . setmaxlistener(20);
console . log(my event . getmax listener(20));listenerCount
已注册事件的数量。
const { event emitter }=require( events );
const my event=new event emitter();
MyEvent.on(data ,()={ });
MyEvent.on(data ,()={ });
MyEvent.on(finish ,()={ });
console . log(my event . listener count())//2有关node的更多信息,请访问:nodejs教程!那就是要深入讲node.js中EventEmitter的细节请关注我们的其他相关文章了解更多!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。