主题
错误处理
错误分为同步异常、Promise rejection、回调错误和 EventEmitter 的 error 事件。边界处捕获并转换为可观测、可恢复或可安全终止的结果。
async / await
js
try {
const user = await findUser(id)
return user
} catch (error) {
logger.error({ err: error, id }, '查询用户失败')
throw error
}不要吞掉错误;需要降级时明确记录原因和返回的兜底值。可预期的业务错误可自定义 code,不要依赖错误消息字符串判断分支。
回调和事件
Node.js 回调通常遵循 error-first 约定:callback(error, result)。EventEmitter 若触发 error 而没有监听器,进程可能退出。
js
stream.on('error', (error) => {
logger.error({ err: error }, '读取失败')
})进程级事件
uncaughtException 与 unhandledRejection 只适合记录、停止接流量并有序退出,不能让已损坏的进程继续提供服务。修复根因,并在部署层通过进程管理器重启。
