Javascript Axios Как вернуть статус 404 из функции

#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. Хорошо. Теперь я понял. Спасибо за ваше время