Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 抛出对象而不是返回字符串_Javascript_Reactjs_Ecmascript 6_Axios - Fatal编程技术网

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;
  }