Dev.to|📄 原文链接|2026-07-22 收录

你在重新抛出异常时丢失了上下文——Error.cause 修复了这个问题

来源:dev.to/parsajiravand

📋 概述

异常处理有一个隐性但普遍的问题:你在调用栈深处捕获错误、包装上更描述性的消息重新抛出——但原始错误的堆栈跟踪和细节全丢了。日志只剩"Failed to load user 42",你不知道是网络超时、403 还是 JSON 解析错误。ES2022 的 Error.cause 选项彻底解决了这个问题:new Error(msg, {cause: originalErr}) 将原始异常附着到新异常上,调用方通过 err.cause 访问完整链路,形成从底层到顶层的异常链而非被压扁的消息字符串。

🔑 核心要点

💡 金句

With Error.cause, you get a chain, not a flattened string.
← 返回 Dev.to 首页