Axios: 422 ответ не отклонен

Созданный на 22 февр. 2017  ·  3Комментарии  ·  Источник: axios/axios

У нас есть проект, который использует [email protected] (обновление до 0.15.3 не решило проблему) во многих частях приложения. Во всех остальных частях приложения мы можем получить .catch() 422 кода ответа. Недавно мы заметили, что 1 запрос обрабатывает промис, который получает ответ 422. Во всех остальных частях нашего приложения ошибка 422 приводит к отклонению обещаний axios.

export function addTool(name: string): Thunk {
  return (dispatch, getState) => {
    Axios
      .post<Tool>(API.current.toolsPath, { name })
      .then(resp => {
        if (resp instanceof Error) { throw resp; }
        success("Tool has been saved.", "Success");
        dispatch(addToolOk(resp.data));
      })
      .catch((e: Error) => {
        dispatch(addToolNo(e));
        error(prettyPrintApiErrors(e));
      });
  };
}

Исходный код здесь

Мне удалось обойти эту проблему, добавив следующую строку в мой .then() :

if (resp instanceof Error) { throw resp; }

Что отлично работает, но я все еще не понимаю, почему этот конкретный 422 разрешен (а не отклонен). У нас также есть несколько перехватчиков , но они не вызывают проблем с другими запросами, которые мы отправляем.

Существуют ли какие-либо обстоятельства, которые заставят axios разрешить ошибку 422, а не отклонить ее? Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация.

Спасибо за помощь!

Самый полезный комментарий

Изучив эту проблему, я обнаружил, что на самом деле это была ошибка локального типа, скрытая где-то глубоко в стеке вызовов, что заставило меня поверить, что это локальная проблема, а не проблема с Axios.

ОБНОВИТЬ:

После некоторого расследования я смог связать это с плохим перехватчиком «ответ отклонен».

В перехватчике я написал:

return error

и я решил проблему, написав вместо этого:

return Promise.reject(error);

Все 3 Комментарий

Подтвержденный. Я также вижу нечто подобное при использовании axios с redux-saga , где некоторые 422 не обрабатываются как отклоненные обещания.

Ничего, нашел свою проблему. Перехватчики неправильно передавали ошибки на уровень приложения, черт возьми! 😳

Изучив эту проблему, я обнаружил, что на самом деле это была ошибка локального типа, скрытая где-то глубоко в стеке вызовов, что заставило меня поверить, что это локальная проблема, а не проблема с Axios.

ОБНОВИТЬ:

После некоторого расследования я смог связать это с плохим перехватчиком «ответ отклонен».

В перехватчике я написал:

return error

и я решил проблему, написав вместо этого:

return Promise.reject(error);
Была ли эта страница полезной?
0 / 5 - 0 рейтинги