前端错误处理最佳实践:构建健壮的用户体验
常见误区
很多开发者认为加个 try-catch 就能搞定一切,或者觉得 console.error 足够记录问题。实际上,错误的处理方式往往比业务逻辑更复杂。如果处理不当,不仅无法定位问题,还会让代码变得臃肿难维护。
常见的坑包括:
- 忽略错误:Promise 链中不捕获异常,导致静默失败。
- 过度嵌套:层层包裹 try-catch,逻辑难以追踪。
- 信息缺失:抛出通用错误,丢失上下文。
- 缺乏全局监控:未捕获的 Promise rejection 或运行时错误未被记录。
正确的处理策略
1. 基础异步处理
使用 async/await 配合明确的错误抛出,确保调用方能感知状态。
async function fetchData() {
try {
const response = await fetch('/api/data');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching data:', error);
throw error; // 向上层传递以便统一处理
}
}
2. 自定义错误类
通过继承 Error 类携带额外信息(如 HTTP 状态码),便于区分错误类型。
class ApiError extends Error {
constructor(message, status) {
super(message);
this. = ;
. = status;
}
}
() {
{
response = ();
(!response.) {
(, response.);
}
data = response.();
data;
} (error) {
(error ) {
.(, error.);
} {
.(, error);
}
error;
}
}

