NodeJs简明教程将从零开始学习NodeJs相关知识,助力JS开发者构建全栈开发技术栈!微信
本文是NodeJs简明教程的第七篇,将介绍NodeJs events模块相关的基本操做。架构
大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。异步
使用事件监听器通常包含如下操做:函数
const EventEmitter = require('events'); // 引用模块
class MyEmitter extends EventEmitter {} // 初始化监听器
const myEmitter = new MyEmitter();
myEmitter.on('event', () => { // 设置监听函数
console.log('an event occurred!');
});
myEmitter.emit('event'); // 触发事件
复制代码
以上例程会输出an event occurred!
学习
上文中的监听方式事件触发几回
就会输出几回an event occurred!
,有些事件多是一次性的。这时候能够使用once
监听。ui
const EventEmitter = require('events'); // 引用模块
class MyEmitter extends EventEmitter {} // 初始化监听器
const myEmitter = new MyEmitter();
myEmitter.once('event', () => { // 设置监听函数
console.log('an event occurred!');
});
myEmitter.emit('event'); // 触发事件
myEmitter.emit('event'); // 触发事件
复制代码
以上例程会输出1次
an event occurred!
;spa
上文中的监听方式都是只有1个
监听函数,经过屡次调用on
能够设置多个监听函数。code
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', () => { // 监听器1
console.log('监听器1收到事件');
});
myEmitter.on('event', () => { // 监听器2
console.log('监听器2收到事件');
})
myEmitter.emit('event'); // 触发事件
复制代码
以上例程会输出cdn
监听器1收到事件
监听器2收到事件
复制代码
emit
函数的第一个值为事件名
,后续参数为事件值
on
和once
等监听器设置函数的回调函数收到的值为emit传入的事件参数
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', (param1,param2,param3) => { // 接收事件参数
console.log('收到事件',param1,param2,param3);
});
myEmitter.emit('event','参数1','参数2',{name:'参数3'}); // 发送事件参数
复制代码
以上例程会输出对象
收到事件 参数1 参数2 { name: '参数3' }
复制代码
使用eventNames()实例方法
获取监听器上全部事件
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', (param1,param2,param3) => {
console.log('收到事件',param1,param2,param3);
});
myEmitter.once('event2',() => {
console.log('收到事件2');
});
console.log(myEmitter.eventNames());
复制代码
以上例程输出[ 'event', 'event2' ]
使用off实例方法
移除单个监听器
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
const callback = (param1) => {
console.log(param1);
};
myEmitter.on('event', callback); // 添加监听器
myEmitter.off('event', callback); // 移除监听器
myEmitter.emit('event'); // 触发事件
复制代码
以上例程没有输出
,由于先添加监听器,随后移除,触发事件时已经没有可用的监听器了
使用removeAllListeners([eventName])实例方法移除全部监听器
。
不传参数
时移除该emitter实例
上全部
事件监听器字符串
参数时移除该emitter实例
上全部该事件
的监听器事件系统是NodeJs的灵魂,在几乎全部的I/O模块都有使用,但愿各位读者好好掌握。事件模块读后有疑问请加微信群讨论。