Вардар. Как получить ответ об ошибке, даже если API возвращает ошибку 404, в try catch, наконец,

1

например,

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error(err);
  } finally {
    console.log(apiRes);
  }
})();

в finally apiRes вернет значение null.

Даже когда api получает ответ 404, в ответе есть еще полезная информация, которую я бы хотел использовать.

Как я могу использовать ответ об ошибке в finally когда axios выдает ошибку.

https://jsfiddle.net/jacobgoh101/fdvnsg6u/1/

  • 0
    Возможно, полезная информация, о которой вы говорите, err ? Я не могу понять, почему вы хотите получить его в finally а не в catch , но если вы это сделаете, просто сохраните его в catch в переменной, к которой вы можете получить доступ в finally .
  • 0
    @TJCrowder ошибка в catch не содержит ответ API. если я смогу обойти это, тогда ваш метод сработает!
Показать ещё 1 комментарий
Теги:
error-handling
axios

2 ответа

1
Лучший ответ

Согласно документации, полный ответ доступен как свойство response на ошибку.

Поэтому я бы использовал эту информацию в блоке catch:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error("Error response:");
    console.error(err.response.data);    // ***
    console.error(err.response.status);  // ***
    console.error(err.response.headers); // ***
  } finally {
    console.log(apiRes);
  }
})();

Обновленный скрипт

Но если вы захотите в finally, просто сохраните его в переменной, которую вы можете использовать там:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    apiRes = err.response;
  } finally {
    console.log(apiRes); // Could be success or error
  }
})();
  • 1
    моя вина. Я пропустил это. Это именно то, что мне нужно. Спасибо !
0

В соответствии с документацией AXIOS (здесь: https://github.com/axios/axios) вы можете передать validateStatus: false в объекте конфигурации любому запросу axios.

например

axios.get(url, { validateStatus: false })
axios.post(url, postBody, { validateStatus: false })

Вы также можете передать функцию, подобную этой: validateStatus: (status) => status === 200 соответствии с документами поведение по умолчанию - это функция, которая возвращает true, если (200 <= status <300).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню