面试题答案
一键面试- 创建自定义事件发射器类:
- 在Node.js中,可以通过继承
events.EventEmitter
类来创建自定义事件发射器。以下是一个示例代码:
- 在Node.js中,可以通过继承
const events = require('events');
class MyAsyncEmitter extends events.EventEmitter {
constructor() {
super();
}
performAsyncOperation() {
// 模拟异步操作,这里用setTimeout模拟
setTimeout(() => {
const shouldError = Math.random() > 0.5; // 随机决定是否出错
if (shouldError) {
const error = new Error('Async operation failed');
this.emit('error', error);
} else {
this.emit('success');
}
}, 1000);
}
}
- 在主程序中监听并处理错误事件:
const myEmitter = new MyAsyncEmitter();
myEmitter.on('error', (error) => {
console.error('Error occurred:', error.message);
});
myEmitter.on('success', () => {
console.log('Async operation completed successfully');
});
myEmitter.performAsyncOperation();
在上述代码中:
- 首先创建了一个
MyAsyncEmitter
类,它继承自events.EventEmitter
。performAsyncOperation
方法模拟了一个异步操作,随机决定是否触发错误事件。 - 在主程序部分,创建了
MyAsyncEmitter
的实例myEmitter
,并分别监听error
和success
事件。当performAsyncOperation
方法执行时,根据模拟的异步操作结果,相应的事件会被触发,从而执行对应的回调函数。