【发布时间】:2021-11-08 22:27:37
【问题描述】:
如何抛出带有选项或状态码的错误然后捕获它们?
从语法here 看来,我们可以通过附加信息解决错误:
new Error(message, options)
那么,我们可以像下面这样扔吗?
throw new Error('New error message', { statusCode: 404 })
那么,我们如何才能捕捉到statusCode?
try {
//...
} catch (e) {
console.log(e.statusCode) // not working off course!
}
有什么想法吗?
编辑:
选项是not supported。
我的解决方法是重新抛出错误:
try {
const found = ...
// Throw a 404 error if the page is not found.
if (found === undefined) {
throw new Error('Page not found')
}
} catch (error) {
// Re-throw the error with a status code.
error.statusCode = 404
throw error
}
不是一个优雅的解决方案。
【问题讨论】:
-
"从这里的语法来看,我们似乎可以通过附加信息来解决错误:" 然后页面描述了
options的外观。它可以包含cause。 -
为什么你需要专门抛出
Error而不是其他任何东西? -
要么创建一个带有第二个参数的自定义错误子类,要么使用
throw Object.assign(new Error('New error message'), { statusCode: 404 }); -
"尚不支持选项。" 1. 实际上只有一个选项可以使用。不是任意选项。 2. 支持该选项,但仅在最新的 Chrome/FF/Safari caniuse.com/…
-
"我的解决办法是重新抛出错误:" 为什么?这比使用
try/catch作为控制流更糟糕。因为没有控制,它是线性的。为什么不创建错误,添加属性 then throw 它,而不是 create -> throw -> add property -> rethrow?我不明白你想在这里发生什么。您到底在寻找什么解决方案,为什么这一切都如此丰富?
标签: javascript error-handling try-catch throw