面试题答案
一键面试Node.js事件驱动模型工作原理
- 事件循环(Event Loop):Node.js运行时维护一个事件循环。它不断地检查事件队列,当有事件进入队列时,事件循环会取出事件并将其交给相应的回调函数处理。
- 非阻塞I/O:Node.js采用非阻塞I/O操作,这意味着在执行I/O操作(如读取文件、网络请求等)时,不会阻塞主线程,而是将I/O操作交给操作系统执行,主线程继续执行后续代码。当I/O操作完成后,操作系统将结果放入事件队列,事件循环再处理该事件。
- 回调函数:在发起I/O操作或其他异步操作时,开发者会提供一个回调函数。当操作完成后,这个回调函数会被放入事件队列等待执行。
利用EventEmitter实现简单的事件监听与触发示例
以下是使用Node.js内置的events
模块中的EventEmitter
类实现简单事件监听与触发的示例代码:
const EventEmitter = require('events');
// 创建一个EventEmitter实例
const myEmitter = new EventEmitter();
// 监听事件
myEmitter.on('customEvent', function(data) {
console.log('监听到customEvent事件,数据为:', data);
});
// 触发事件
myEmitter.emit('customEvent', { message: '这是传递的数据' });
在上述代码中:
- 首先引入
events
模块,并创建了一个EventEmitter
实例myEmitter
。 - 使用
myEmitter.on('eventName', callback)
方法来监听名为customEvent
的事件,当该事件触发时,会执行传入的回调函数。 - 使用
myEmitter.emit('eventName', data)
方法来触发customEvent
事件,并传递了一个包含消息的数据对象。当事件触发时,之前监听该事件的回调函数会被执行,并接收到传递的数据。