Promise.reject消息应该包含在Error中吗?

Dom*_*nic 26 javascript error-handling promise es6-promise

使用原生(ES6)承诺.我应该拒绝错误:

Promise.reject(new Error('Something went wrong'));
Run Code Online (Sandbox Code Playgroud)

或者我应该拒绝一个字符串:

Promise.reject('Something went wrong');
Run Code Online (Sandbox Code Playgroud)

浏览器行为有什么不同?

Ben*_*aum 24

是的,它绝对应该.字符串不是错误,当你有错误时通常意味着出错了,这意味着你真的很喜欢堆栈跟踪.没有错误 - 没有堆栈跟踪.

就像使用try/catch一样,如果添加.catch抛出拒绝,您希望能够记录堆栈跟踪,为您抛出字符串废墟.

我在移动设备上,所以这个答案很短,但我真的无法强调这是多么重要.在大型(10K + LoC)应用程序中,拒绝堆栈中的痕迹确实使得轻松的远程错误捕获与办公室中漫长的夜晚之间存在差异.

  • 另外,如果您在包装另一个 Promise 的函数中重新抛出错误,则可以将 catch 参数中的错误作为原因传递,如下所示: `.catch((err)=>{reject(new Error('message .. .', {原因: 错误}))})` (2认同)