【发布时间】:2021-02-16 12:43:39
【问题描述】:
function doFoo() {
throw new Error("no foo for you");
}
try {
doFoo();
} catch(e) {
throw new Error("doFoo() for shame!", e);
}
在 JavaScript 中有什么健全的方法可以做到这一点?
我提出这个问题的特定用例的具体目标如下,按此顺序:
- 遵循标准,或至少遵循最佳做法
- 抛出一个新的异常/错误/任何你想调用它的东西(不仅仅是重新抛出我刚刚捕获的东西);从现在开始,我将把它称为例外
- 保留上一个异常中的消息(我想保留堆栈跟踪,但这对于此特定用例而言并不重要)
- 为之前的异常添加额外的元数据
- 保留上一个异常的堆栈跟踪(很高兴拥有,现在对我来说并不重要)
【问题讨论】:
-
问题 - 你想抛出一个新消息的错误还是只是重新抛出?如果是后者就
catch(e) { throw e } -
请重温问题的标题:我特别想保留内部异常。
-
我找到的副本有点旧,但相信你正在寻找的一切。
-
@Bergi,不仅它很旧,而且它也不能满足我的第一个目标。请删除重复项。
-
@BogdanStăncescu 你怎么知道?我可以告诉你,ECMAScript 标准中没有实现这一点,并且副本中的所有库(以及它们可能更现代/流行的表亲)都遵循将内部错误包装为属性的最佳实践新错误。
标签: javascript exception