前言
本文主要给大家介绍了关于node.js事件模块Events使用的一些示例,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
环境:Node v8.2.1; Npm v5.3.0; OS Windows10
1、 Node事件介绍
Node大多数核心 API 都采用惯用的异步事件驱动架构,其中某些类型的对象(触发器)会周期性地触发命名事件来调用函数对象(监听器)。
所有能触发事件的对象都是 EventEmitter 类的实例。 这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上。 事件名称通常是驼峰式的字符串,但也可以使用任何有效的 JavaScript 属性名。
当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都被同步地调用。 监听器的返回值会被丢弃。
2、events 模块API介绍
3、 一些例子
下面是一些简单的例子,对应上面的API的一个代码实现
3.1 绑定和触发事件
const EventEmitter = require('events'); //自定义一个对象继承于EventEmitter class MyEmitter extends EventEmitter { } const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log('触发了一个事件!'); }); myEmitter.emit('event');
3.2 为事件传递参数
const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', (a,b) => { console.log(a,b); //1,2 }); myEmitter.emit('event','a','b');
3.3 this 的问题
当一个普通的监听器函数被 EventEmitter 调用时,标准的 this 关键词会被设置指向监听器所附加的 EventEmitter。
const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', function() { console.log(this); /* a b MyEmitter { domain: null, _events: { event: [Function] }, _eventsCount: 1, _maxListeners: undefined } */ }); myEmitter.emit('event');
也可以使用 ES6 的箭头函数作为监听器。但是这样 this 关键词就不再指向 EventEmitter 实例:
const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log(this); //{} }); myEmitter.emit('event');
内容版权声明:除非注明,否则皆为本站原创文章。