Promise.reject 消息是否应该包含在 Error 中?
IT技术
javascript
error-handling
promise
es6-promise
2021-02-03 09:52:54
2个回答
是的,它绝对应该。字符串不是错误,当您出现错误时,通常意味着出现问题,这意味着您真的会享受良好的堆栈跟踪。没有错误 - 没有堆栈跟踪。
就像 try/catch 一样,如果你添加.catch
了一个抛出的拒绝,你希望能够记录堆栈跟踪,抛出字符串会破坏你的状态。
我在手机上,所以这个答案很短,但我真的无法强调这有多重要。在大型(10K+ LoC)应用程序中,拒绝中的堆栈跟踪确实使轻松的远程错误搜索和在办公室度过漫长的夜晚有所不同。
我建议仅使用Error
对象(而不是字符串)来发送原因。
理由
代码的其他部分正在生成Errors
内部的 Promise 拒绝原因......
如果某些代码失败,则异常返回Error
对象。此外,如果您将调用任何不支持 Promise 的外部库,它会在Error
出现故障时抛出该对象。如果上面提到的错误之一发生在 Promise 内部,它就会被转化为catch
with Error
object。
因此,如果您将使用string
as Promise拒绝原因,您必须期望捕获可以发生在您的string
(您的代码的一部分)或Error
(发生一些一般错误时)。因此(err.message || err)
,当您必须处理错误时,您将不得不在任何地方使用丑陋的代码。
其它你可能感兴趣的问题