这个问题在这里已有答案:
我正在使用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) });
在这种情况下,两种错误处理方式之间存在哪些实际差异?
1 回答
那是因为当你将
Error
称为函数(没有new
)时,它的行为与你用new
调用的行为完全相同 . 也就是说,Error(x)
和new Error(x)
完全一样 . 这是Error
函数的"feature" . 通常情况下,调用一个没有new的函数和用new
调用它之间有区别,就在这种情况下不行 .从the spec: