Бросить объект вместо возвращаемой строки - PullRequest
0 голосов
/ 14 мая 2018

Как построить объект 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. Должен ли я сделать свой собственный класс, чтобы сделать это, или я могу изменить существующий класс ошибок для этого? Мне нужно это, чтобы оно стандартизировало мое сообщение об ошибке моего другого набора Apis.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете использовать объект ошибки, возвращенный из 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;
  }
0 голосов
/ 14 мая 2018

Вы можете просто добавить поле в объект 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);
...