提问人:aioobe 提问时间:5/4/2022 更新时间:5/7/2022 访问量:947
如何在JavaScript中抛出“富有表现力”/控制台友好的异常?
How to throw "expressive" / console friendly exceptions in JavaScript?
问:
JavaScript 菜鸟在这里...我正在探索抛出异常的各种选项。
抛出字符串/原始值
这似乎是不好的做法,原因有几个(捕获、堆栈跟踪......
用Error
throw new Error("bad times")
这似乎是一种常见的方法,但我不是忠实的粉丝,因为我无法轻松添加额外的信息。例如,我不能这样做
throw new Error("bad times", { reason: strangeObject })
我可以提供额外的信息,但我喜欢在控制台中展开/折叠对象。JSON.stringify
据我所知,我不会在自定义异常/错误子类方面走得更远。
扔{ msg: "bad times", reason: strangeObject }
这使我可以在控制台中很好地展开/折叠。为了使整个应用程序中的例外情况保持一致,我需要到处重复该部分,我不喜欢这部分。strangeObject
msg:
我最终选择了最后一种方法,只是为了发现 ESLinter 抱怨这种方法:
预期会引发错误对象
no-throw-literal
所以,我的问题基本上是:我可以以控制台友好的方式使用(或自定义子类),即支持展开/折叠吗?Error
Error
答:
1赞
aioobe
5/7/2022
#1
我已经解决了一个自定义异常和一个处理程序:window.onerror
class MyAppError extends Error {
constructor(msg, details) {
super(msg)
this.details = details
}
}
window.onerror = function(message, source, lineno, colno, error) {
if (error instanceof MyAppError) {
console.error(message, error.details)
return true
}
return false
}
function throwSomething() {
throw new MyAppError("I made a mess", {
someDetail: "a value",
otherStuff: "another value"
});
}
console.log("Hello World");
throwSomething();
(JSFiddle)
结果在Firefox和Chrome中看起来像这样,我对此非常满意。
评论