我正在与Promises合作,发现建议拒绝时,将Error()
对象作为参数传递,以启用错误处理。
我找到一些给出了new Error()
的示例,还有一些仅给出Error()
的示例。
在测试了几种情况之后,我只是发现一种用法与另一种用法之间没有任何区别,如此处所示,两种拒绝的行为似乎完全相同:
const p = new Promise((resolve, reject) => {
setTimeout(reject, 1000, Error("Nope..."));
//setTimeout(reject, 1000, new Error("Nope..."));
});
p.then(val => { console.log(val) })
.catch(error => { console.error(error.message) });
在这种情况下,两种错误处理方式之间有哪些实际区别?
答案 0 :(得分:2)
在测试了几种情况后,我发现一种用法与另一种用法之间没有任何区别...
那是因为当您将Error
作为函数调用时(没有new
),它的行为就像您使用new
进行调用一样。也就是说,Error(x)
和new Error(x)
的作用完全相同。这是Error
函数的“功能”。通常,在不使用new的情况下调用函数与使用new
进行调用之间是有区别的,只是在这种情况下不会。
来自the spec:
错误构造函数:
- ...
- ...
- 在被调用为函数而不是构造函数时创建并初始化一个新的
Error
对象。因此,函数调用Error(…)
等效于具有相同参数的对象创建表达式new Error(…)
。- ...