概述
Events模块是Node对“发布/订阅”模式(publish/subscribe)的实现。一个对象通过这个模块,向另一个对象传递消息。
Node中的Event模块仅仅提供了一个对象: EventEmitter, EventEmitter 的核心就是事件触发与事件监听器功能的封装。
获取EventEmitter对象
//引用模块events, 点语法获取到EventEmitter
var EventEmitter = require('events').EventEmitter;
//初始化一个对象, 这个实例就是消息中心。
var emitter = new EventEmitter;
第二 EventEmitter 实例对象的方法
2.1 emitter.on(eventName, listener), 监听事件,如果触发就调用回调函数
1. eventName <String> | <Symbol>: 事件名称, 后边可以跟上函数;
2. listener <Function> : 回调函数;
2.2 emitter.emit(eventName[, ...args]), 根据eventName发送通知, 触发事件, 第一个参数为事件名称, 其余的参数会依次传入回调函数
以上两个方法的示例代码
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
//监听函数1, 事件名为--fun1
emitter.on('fun1', function(){
console.log('触发函数1');
});
//定义有参数函数fun2,
var fun2 = function(para){
console.log('触发函数2, 参数为' + para);
};
//监听fun2
emitter.on('fun2', fun2);
//触发事件名
emitter.emit('fun1');
//触发事件名并且传参数
emitter.emit('fun2', 'event');
打印结果为:
$ node 2on.js
触发函数1
触发函数2, 参数为event
2.3 emitter.once(eventName, listener), 类似on方法, 但回调函数只是执行一次
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
emitter.once('oncefun', function(){
console.log('函数只执行一次');
});
emitter.emit('oncefun');
emitter.emit('oncefun');
console.log('--------')
emitter.on('fun', function(){
console.log('函数');
});
emitter.emit('fun');
emitter.emit('fun');
执行的结果为:
$ node 3once.js
函数只执行一次
函数
函数
虽然触发多次oncefun, 但依然打印一次;与下边形成对比;,
2.4 emitter.addListener(eventName, listener)类似于emitter.on(eventName, listener)
2.5 emitter.removeListener(eventName, listener), 移除监听
详细见实例代码:
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
//定义一个函数
var removeFun = function(){
console.log('输出结果');
}
//以fun名称监听removeFun
emitter.on('fun', removeFun);
//每个30毫秒触发一次回调函数
setInterval(function(){
emitter.emit('fun');
}, 30);
//200毫秒以后触发回调函数
setTimeout(function(){
emitter.removeListener('fun', removeFun);
}, 200);
打印结果
$ node 5removeListener.js
输出结果
输出结果
输出结果
输出结果
输出结果
#光标停止
第三部分 更多API详见
语法名称觉得挺好的, 见名知意. 更多的语法就看Node官网吧 -__-
Event: 'newListener'
Event: 'removeListener'
EventEmitter.listenerCount(emitter, eventName)
EventEmitter.defaultMaxListeners
emitter.addListener(eventName, listener)
emitter.emit(eventName[, ...args])
emitter.eventNames()
emitter.getMaxListeners()
emitter.listenerCount(eventName)
emitter.listeners(eventName)
emitter.on(eventName, listener)
emitter.once(eventName, listener)
emitter.prependListener(eventName, listener)
emitter.prependOnceListener(eventName, listener)
emitter.removeAllListeners([eventName])
emitter.removeListener(eventName, listener)
emitter.setMaxListeners(n)
作者:HowardHuang
链接:https://www.jianshu.com/p/fd1f8c998a2c
最后
以上就是会撒娇缘分为你收集整理的node之Events模块的全部内容,希望文章能够帮你解决node之Events模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复