架构设计思路
- 集中式错误处理:在应用的入口或者关键调用点设置统一的错误捕获机制,避免在每个函数调用处都写重复的错误处理代码。
- 自定义错误类型:通过定义不同的自定义错误类型,来区分不同种类的错误,便于在捕获错误时进行针对性处理。
- 事件机制:利用JavaScript的事件机制,将错误信息通过事件传递,这样感兴趣的模块可以监听并处理特定类型的错误。
代码示例
- 自定义错误类型
// 自定义错误类型
class MyCustomError extends Error {
constructor(message) {
super(message);
this.name = 'MyCustomError';
}
}
- 模块内抛出错误
// 假设这是一个模块中的函数
function myFunction() {
throw new MyCustomError('这是一个自定义错误');
}
- 集中式错误捕获与事件机制结合
// 创建一个事件发射器
const EventEmitter = require('events');
const emitter = new EventEmitter();
// 监听自定义错误事件
emitter.on('MyCustomError', (error) => {
console.log('捕获到自定义错误:', error.message);
// 在这里可以进行针对性的错误处理,如日志记录、通知用户等
});
try {
myFunction();
} catch (error) {
if (error instanceof MyCustomError) {
emitter.emit('MyCustomError', error);
} else {
console.log('捕获到其他错误:', error.message);
}
}
关键实现点说明
- 自定义错误类型:通过继承
Error
类创建自定义错误类型,在构造函数中设置name
属性,方便在捕获错误时进行类型判断。
- 事件机制:使用
EventEmitter
创建一个事件发射器,在捕获到错误时,根据错误类型发射相应的事件,感兴趣的模块通过监听这些事件来处理错误,实现了错误处理逻辑的解耦。
- 集中式捕获:在应用的关键调用点(如
try - catch
块)捕获错误,然后根据错误类型进行分类处理,避免了在每个函数调用处重复编写错误处理代码。