我有以下代码确保Promise.reject
返回实际的错误对象:
export const rejectWithAnError = function(error) {
if(error.constructor === Error) {
return Promise.reject(error);
}
const err = { error: true, message: error };
Object.setPrototypeOf(err, new Error());
return Promise.reject(err);
};
然后我遇到了这个link,说使用Object.create会更好。
在这种情况下我如何使用Object.create
?
答案 0 :(得分:1)
将prototype
设置为Error.prototype
,将message
设置为对象,将对象的value
设置为当调用err.constructor
时应显示的消息err.message
作为参数。
var err = Object.create(Error.prototype, {
message: {
value: "error"
},
error: {
value: true
}
})
Promise.reject(err.constructor([err.message, err.error]))
.then(data => console.log(data))
.catch(e => console.log(e, e.message));

答案 1 :(得分:1)
MDN链接特别说:
如果您关心性能,则应避免设置对象的
[[Prototype]]
。而是使用[[Prototype]]
创建一个包含所需Object.create()
的新对象。
因此,您应该创建一个原型为{ error: true, message: error }
的新对象,然后在其上设置属性,而不是使用文字表达式Error.prototype
创建对象并更改其原型:
const err = Object.create(Error.prototype);
err.error = true;
err.message = error;
在MDN's Object.create
page上,您可以看到许多正在使用的Object.create(Foo.prototype)
模式示例。