Я делаю вызов API, используя axios в проекте reactjs, но почему-то не могу поймать ошибку. Я получаю 404, но не могу его поймать. может кто-нибудь сказать мне, что не так?
abc.js
export default axios.create({
baseURL: `my_base_url`,
headers: {
"Content-Type": "application/json",
},
});
xyz.js
export const createProcessApiCall = (param) => {
return API.post("/v1/process1", param);
};
zzz.js
const postData = async (param) => {
await createProcessApiCall(param)
.then((response) => {
setApiData(response.data.data);
setIsSuccess(response.data.isSuccess);
})
.catch((e) => {
setIsError(true);
});
};



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы комбинируете асинхронный код с кодом синхронизации, попробуйте использовать либо асинхронный:
const postData = async (param) => {
try {
const result = await createProcessApiCall(param)
}
catch(err) {
setIsError(true);
}
};
Или синхрон:
const postData = (param) => {
createProcessApiCall(param)
.then((response) => {
setApiData(response.data.data);
setIsSuccess(response.data.isSuccess);
})
.catch((e) => {
setIsError(true);
});
};
Любой код состояния, отличающийся от последовательности, входящей в число 200-299, вам нужно поймать:
const postData = async (param) => {
await createProcessApiCall(param)
.then((response) => {
setApiData(response.data.data);
setIsSuccess(response.data.isSuccess);
})
.catch((e) => {
// @TODO parse err
console.info(e.response);
setIsError(true);
});
};
axios.interceptors.response.use(res=>{return res}, (error) => {
if (error.response.status !== 401) {
throw error;
}
if (typeof error.response.data.error.name !== "undefined") {
//do something on the error
}
});
лучше использовать перехватчик axios, чтобы поймать ошибку
Потому что это не совсем ошибка.
axiosвыдавать ошибку только в том случае, если это, скажем, сетевая ошибка или что-то в этом роде. Ошибка 404, с другой стороны, означает, что запрос был доставлен. Прочитайте этот вопрос