前言
events库是node的内置库的内容,简单点说就是node的事件发布器。(订阅\发布)
node的事件发布器可以为所有的引擎提供事件发布功能。
安装
npm install events
依赖
var EventEmitter = require('events').EventEmitter
node的事件机制
大多数 Node.js 核心 API 都是采用惯用的异步事件驱动架构,其中某些类型的对象(一般称为触发器emitters)会周期性地发送(触发)被命名好的相关事件来调用被称为监听器的函数对象(一般称为触发器listeners)。
例如:
每次对等连接(a peer connects to it)时或者新的连接时,一个服务器(net.Server)对象都会发出(触发)一个事件;
当文件打开时,一个文件流(fs.ReadStream)对象都会发出(触发)一个事件;
只要数据可用被读取,一个流(stream )对象都会发出(触发)一个事件。
所有能发送(触发)事件的对象都是EventEmitter类的实例。这些对象都会暴露一个名为eventEmitter.on()的函数,并允许一个或者多个函数通过这个对象与一些有名字的事件关联到一起。事件名通常都是驼峰形式的字符串,但是,也可以用任何有效的js属性键作为事件名。
???
当EventEmitter对象发出一个事件时,所有附加在特定事件上的函数都被同步地调用,被调用的监听器返回的任何值将被忽略和丢弃。(什么叫做:被调用的监听器返回的任何值将被忽略和丢弃?是不是正是因为如此,才需要使用高级函数呢?)
???
以下例子展示了一个只有单个监听器(listener)的 EventEmitter 实例。 eventEmitter.on() 方法用于注册监听器(listener),eventEmitter.emit() 方法用于触发事件。下面我们看一个例子:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
console.log('开始注册事件');
myEmitter.on('event', () => {
console.log('发生了一个事件');
});
console.log('开始触发事件事件');
myEmitter.emit(