У нас есть проект, который использует [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 с redux-saga
, где некоторые 422 не обрабатываются как отклоненные обещания.
Ничего, нашел свою проблему. Перехватчики неправильно передавали ошибки на уровень приложения, черт возьми! 😳
Изучив эту проблему, я обнаружил, что на самом деле это была ошибка локального типа, скрытая где-то глубоко в стеке вызовов, что заставило меня поверить, что это локальная проблема, а не проблема с Axios.
ОБНОВИТЬ:
После некоторого расследования я смог связать это с плохим перехватчиком «ответ отклонен».
В перехватчике я написал:
return error
и я решил проблему, написав вместо этого:
return Promise.reject(error);
Самый полезный комментарий
Изучив эту проблему, я обнаружил, что на самом деле это была ошибка локального типа, скрытая где-то глубоко в стеке вызовов, что заставило меня поверить, что это локальная проблема, а не проблема с Axios.
ОБНОВИТЬ:
После некоторого расследования я смог связать это с плохим перехватчиком «ответ отклонен».
В перехватчике я написал:
и я решил проблему, написав вместо этого: