Promise.reject(new Error('Something went wrong'));
或者我应该用字符串拒绝:
Promise.reject('Something went wrong');
浏览器行为有什么不同?
答案 0 :(得分:22)
是的,绝对应该。 A string is not an error,当你有错误时,通常会出现问题,这意味着你真的很喜欢堆栈跟踪。没有错误 - 没有堆栈跟踪。
就像使用try / catch一样,如果将.catch
添加到抛出拒绝中,您希望能够记录堆栈跟踪,为您抛出字符串废墟。
我在移动设备上,所以这个答案很短,但我真的无法强调这是多么重要。在大型(10K + LoC)应用程序中,拒绝堆栈中的痕迹确实使得轻松的远程错误捕获与办公室中漫长的夜晚之间存在差异。
答案 1 :(得分:0)
我建议仅使用Error
对象(不是字符串)来发送原因。
代码的其他部分在Promise拒绝原因中生成Errors
...
如果某些代码失败,则异常将返回Error
对象。此外,如果您将调用任何不支持Promise的外部库,它将在出现故障时抛出Error
对象。
如果上面提到的错误之一发生在Promise中,它将被转换为带有catch
对象的Error
。
因此,如果您使用string
作为承诺拒绝原因,则必须预期可以使用string
(代码的一部分)或Error
(当某些代码时)发生一般错误)。因此,当您必须处理错误时,您将不得不在任何地方使用丑陋的代码(err.message || err)
。