MST
星途 面试题库

面试题:Node.js异步错误处理与事件发射器

假设你正在开发一个基于Node.js的应用,其中有一个模块频繁地触发异步操作。你希望通过事件发射器来处理异步操作中的错误,描述一下如何创建一个自定义的事件发射器类,并在异步操作出错时正确地发射错误事件,以及在主程序中如何监听并处理这些错误事件。
39.0万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 创建自定义事件发射器类
    • 在Node.js中,可以通过继承events.EventEmitter类来创建自定义事件发射器。以下是一个示例代码:
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);
    }
}
  1. 在主程序中监听并处理错误事件
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.EventEmitterperformAsyncOperation方法模拟了一个异步操作,随机决定是否触发错误事件。
  • 在主程序部分,创建了MyAsyncEmitter的实例myEmitter,并分别监听errorsuccess事件。当performAsyncOperation方法执行时,根据模拟的异步操作结果,相应的事件会被触发,从而执行对应的回调函数。