抛出对象而不是返回字符串

时间:2018-05-14 08:29:15

标签: javascript reactjs ecmascript-6 axios

如何构建一个Error对象而不是给它一个字符串? https://codesandbox.io/s/pwr973487x

async function getUrl()  {
  try {

    const res = await axios.get('https://httpstat.us/500')
  } catch(e) {
    const errorObj = {
      status: 500,
      message: 'Internal server error, something is not defined etc'
    }
    throw new Error('err') //how to build object?
  }
}

我希望throw Error()返回errorObj。我是否必须自己创建类或者我可以修改现有的Error类?我需要它,所以它标准化我的不同Apis集的错误信息。

2 个答案:

答案 0 :(得分:1)

您可以使用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;
  }

答案 1 :(得分:0)

您只需在Error对象中添加一个字段,例如

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