12-events(事件).pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在JavaScript的世界里,`EventEmitter` 是一个非常重要的概念,特别是在Node.js环境中。它允许对象在特定时刻发出信号,告知其他部分系统某些操作已完成或发生了某种情况。这通常被称为事件驱动编程,是构建异步非阻塞应用的核心部分。`EventEmitter` 类是Node.js的`events`模块提供的一种工具,它提供了监听和触发事件的能力。 我们来了解一下`EventEmitter`类的基本用法。通过`require('events')`导入`EventEmitter`,然后可以创建它的实例。下面是一个简单的例子: ```javascript const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log('发生了一个事件!'); }); myEmitter.emit('event'); ``` 在这个例子中,`myEmitter`实例化了`EventEmitter`,并添加了一个名为`event`的监听器。当调用`emit('event')`时,监听器函数会被执行。 `EventEmitter`提供了多种方法来管理事件和监听器: - `emitter.addListener(eventName, listener)`:添加一个监听器到指定事件。 - `emitter.on(eventName, listener)`:等同于`addListener`,用于添加监听器。 - `emitter.once(eventName, listener)`:添加一个只会在事件被触发一次后被移除的监听器。 - `emitter.removeListener(eventName, listener)`:移除指定事件的指定监听器。 - `emitter.removeAllListeners([eventName])`:移除所有事件的所有监听器,或者只移除指定事件的监听器。 - `emitter.setMaxListeners(n)`:设置事件的最大监听器数量,防止内存泄漏,默认值为10。 关于`this`关键字,在事件处理函数中的`this`通常会指向`EventEmitter`实例,如下例所示: ```javascript myEmitter.on('event', function(a, b) { console.log(a, b, this); }); myEmitter.emit('event', 'a', 'b'); ``` 在上面的例子中,`this`指向了`myEmitter`实例。 异步与同步的区别在于,当事件处理函数中包含异步操作(如`setImmediate`),则该处理函数会在当前执行上下文的下一轮事件循环中执行,不会阻塞其他任务。 ```javascript myEmitter.on('event', (a, b) => { setImmediate(() => { console.log('这个是异步发生的'); }); }); myEmitter.emit('event', 'a', 'b'); ``` 错误处理是`EventEmitter`中的关键部分。默认情况下,如果在监听器中抛出错误,Node.js会崩溃。但可以通过监听`error`事件来捕获这些错误: ```javascript myEmitter.emit('error', new Error('whoops!')); ``` 如果未定义`error`事件的监听器,上述代码将导致程序崩溃。为了防止这种情况,可以全局监听`uncaughtException`事件: ```javascript process.on('uncaughtException', (err) => { console.log('有错误'); }); ``` 此外,`EventEmitter`还有一些特殊事件,如`'newListener'`和`'removeListener'`,它们在监听器添加和移除时触发,可以帮助我们追踪事件监听器的变化。`EventEmitter.listenerCount(emitter, eventName)`方法用于获取指定事件的监听器数量,而`emitter.eventNames()`返回所有已注册事件的数组。 `EventEmitter`是Node.js中实现事件驱动编程的关键组件,通过监听和触发事件,可以有效地组织代码,使其在处理异步操作时保持高效和可维护性。理解并熟练使用`EventEmitter`是成为合格的Node.js开发者的基础。
- 粉丝: 48
- 资源: 8282
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助