企业级异步异常管理需全程可追溯、可配置、可审计:统一自定义错误类,分层拦截,标准化响应动作,并通过ESLint、CI扫描、监控平台等工程机制保障落地。

在企业级项目中,规范化管理异步异常流不是加几个 catch 就完事,而是要让错误从发生、捕获、分类、响应到上报,全程可追溯、可配置、可审计。
统一错误类型与结构化构造
禁止直接抛出字符串或原生 Error 实例。所有业务异步错误必须使用继承自 Error 的自定义类(如 ApiError、ValidationError),并强制携带以下字段:
-
code:语义化错误码(如
'AUTH_EXPIRED'、'ORDER_NOT_FOUND'),不依赖 HTTP 状态码 -
level:标记严重等级(
'error'/'warn'/'info'),决定是否触发告警 -
context:当前操作上下文(如
{ userId, orderId, page: 'checkout' }) - original:保留原始错误引用(便于调试底层原因)
示例:throw new ApiError('Token 已过期', { code: 'AUTH_EXPIRED', level: 'warn', context: { userId: 1001 } });
分层拦截与兜底策略
错误不能只靠开发者“想起来 catch”,而要按调用层级设防:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
API 层:封装的
fetch或 axios 实例,对非res.ok、超时、网络中断等主动reject,不交给上层判断状态码 -
业务逻辑层:所有
async函数入口处必须有try/catch,或显式返回Promise并确保链末有.catch() -
UI 层:React 组件用
ErrorBoundary捕获渲染阶段未处理的异步 reject;Vue 使用errorCaptured钩子 -
全局兜底:监听
unhandledrejection和error事件,记录日志并上报,避免静默失败
标准化响应动作与用户反馈
不同错误类型对应不同用户侧行为,团队需提前约定并固化到工具函数中:
- 网络类失败(断网、超时、5xx)→ 触发自动重试(最多 2 次),同时显示「正在重试…」提示
- 4xx 类业务错误(参数错、权限不足)→ 直接提示友好文案(如「该订单无法修改,请联系客服」),不重试
-
解析/校验失败(JSON 解析异常、字段缺失)→ 降级展示默认内容,记录
warn日志,不打断流程 - 核心依赖不可用(auth token 无效、全局 store 污染)→ 清理本地状态,跳转登录页或刷新页面
可落地的工程保障机制
把规范变成能检查、能拦截、能回溯的动作:
- ESLint 插件检查:强制
fetch封装函数含!res.ok && reject();禁止.then()后无.catch()或外层try - CI 阶段扫描 PR:检测
addEventListener回调、setTimeout内部是否包裹try/catch并调用统一上报函数 - 错误监控平台对接:所有上报字段统一走
reportError(err)入口,自动附加环境、版本、用户 ID、堆栈来源 - 定期审计:抽取线上
error日志,统计高频未处理 Promise reject 场景,反向优化 SDK 或 Hook

















