#javascript #axios
#javascript #axios
Вопрос:
У меня возникла проблема, как вернуть статус axios из функции. Я нашел решение, но я чувствую, что есть лучший вариант. Я перепробовал много способов, но работает только этот. Правильно ли это решение? или я должен найти другой?
export const getPerson = async (patient) => {
try {
const res = await axios.post('/api/user',patient)
return res.data
} catch (err) {
return err.response.status
}
};
onSubmit = async () =>{
await getPerson({id:this.state.id})
.then(data => {
if(data === 404){
this.setState({errorStatus:data})
}
console.log(data)
})
}
Также может кто-нибудь объяснить мне, почему в этом примере then и catch выполняются одновременно.
onSubmit = async () =>{
await getPerson({id:this.state.id})
.then(data => {
console.log(data)
})
.catch( err => console.log(err)
}
Ответ №1:
Лучшим подходом, на мой взгляд, было бы вернуть одну и ту же структуру объекта в обоих случаях. Разница будет в том, что содержит объект.
export const getPerson = async (patient) => {
try {
const res = await axios.post('/api/user',patient)
return {data: res.data, status: 200}
} catch (err) {
return {data: {}, status: err.status}
}
};
С помощью этого вы можете просто проверить статус ошибки, если хотите определить, являются ли данные действительными или нет, на основе статуса ответа, с проверкой статуса.
if (data.status === 200) {
console.log(data)
}
else {
this.setState({errorStatus: data.status})
}
Что касается вашего вопроса, я полагаю, что запрос post выдает ошибку, поэтому он начинается с .then()
функции, а затем запрос post выдает ошибку, которая перехватывается .error()
Комментарии:
1. Спасибо. Это выглядит более элегантно
Ответ №2:
Почему бы просто не передать сообщение об ошибке в вызывающую функцию, если вы хотите обработать ошибку там?
export const getPerson = patient => axios.post('/api/user', patient)
onSubmit = async () => {
try {
const res = await getPerson({ id: this.state.id })
console.log(res);
}
catch (err) {
this.setState({ errorStatus: err.response.status })
}
}
Комментарии:
1. Я сохраняю действие axios в другом файле.
2. Затем просто напишите
export const getPerson = patient => axios.post('/api/user', patient)
в этом другом файле3. Хорошо. Теперь я понял. Спасибо за ваше время