Javascript 抛出对象而不是返回字符串
如何构建一个错误对象而不是给它一个字符串Javascript 抛出对象而不是返回字符串,javascript,reactjs,ecmascript-6,axios,Javascript,Reactjs,Ecmascript 6,Axios,如何构建一个错误对象而不是给它一个字符串 我想抛出Error返回errorObj。我需要自己的类来完成吗?或者我可以修改现有的错误类来完成吗?我需要它,以便它标准化我的不同API集的错误消息。您只需向错误对象添加一个字段,例如 var err = new Error('Internal Server error'); err.customField = { someProperty: 'some value'}; console.log(err); 然后你可以像平常一样扔它: throw e
我想抛出Error返回errorObj。我需要自己的类来完成吗?或者我可以修改现有的错误类来完成吗?我需要它,以便它标准化我的不同API集的错误消息。您只需向错误对象添加一个字段,例如
var err = new Error('Internal Server error');
err.customField = { someProperty: 'some value'};
console.log(err);
然后你可以像平常一样扔它:
throw err;
当您在调用堆栈中捕捉到较高级别的错误时,可以拉出自定义字段:
try
{
throw err;
}
catch (e)
{
console.error(e);
console.log(e.customField);
}
使用ES6以后的版本,您还可以创建自己的错误类:
class MyError extends Error {
constructor(message, customValue) {
super(message);
this.field = customValue;
}
get customField() {
return this.field;
}
set customField(obj) {
this.field = obj;
}
};
var ex = new MyError('Error message', {someProperty: 'some value'});
console.dir(ex);
console.log('My custom error details: ', ex.customField);
您可以使用catch返回的错误对象
try {
const res = await axios.get('https://httpstat.us/500')
} catch(e) {
e.message = 'Internal server error, something is not defined etc';
throw e;
}
你也可以使用console.warn'something'或console.error'something'使它们在浏览器的控制台中看起来不同。当人们可以抛出他们喜欢的任何对象时,扩展错误对象的首选项是什么。很好,@evolutionxbox,你可以采用这种方法。我不确定所有浏览器是否都能很好地使用这种模式,例如,如何在控制台中报告它等。我个人觉得扩展错误对象会更舒服。此外,你会得到任何对象的堆栈跟踪吗?你可以抛出errorObj…?-还有,你为什么要把球扔进去?@为什么不把球扔进去\_ツ_/''-我通常不会,除非我希望在其他地方发现错误。。。但是,您完全可以抛出一个普通对象,而不扩展错误对象。
try {
const res = await axios.get('https://httpstat.us/500')
} catch(e) {
e.message = 'Internal server error, something is not defined etc';
throw e;
}