繁体   English   中英

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

[英]Should a Promise.reject message be wrapped in Error?

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

Promise.reject(new Error('Something went wrong'));

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

Promise.reject('Something went wrong');

浏览器行为有什么不同?

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

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

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

我建议仅使用Error对象 (不是字符串)来发送原因。

理由

代码的其他部分在Promise拒绝原因中生成Errors ...

如果某些代码失败,则异常将返回Error对象。 此外,如果您将调用任何不支持Promise的外部库,它将在出现Error时抛出Error对象。 如果上面提到的错误之一发生在Promise中,它将被转换为带有Error对象的catch

因此,如果您将string用作承诺拒绝原因,则必须预期捕获可能发生在您的string (代码的一部分)或Error (发生某些一般错误时)。 所以当你必须处理错误时,你将不得不在任何地方使用丑陋的代码(err.message || err)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM