J'ai eu un problème pour retourner le statut axios de la fonction. J'ai trouvé la solution mais je pense qu'il y a une meilleure option. J'ai essayé de nombreuses façons, mais seule celle-ci fonctionne. Cette solution est-elle correcte? ou je devrais en trouver un autre?

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)
        })
    }

Quelqu'un peut-il également m'expliquer pourquoi dans cet exemple, puis attraper s'exécuter simultanément.

onSubmit = async () =>{
        await getPerson({id:this.state.id})
        .then(data => {
            console.log(data)
        })
        .catch( err => console.log(err)
    }
2
UnknownUser 1 sept. 2020 à 18:14

2 réponses

Meilleure réponse

Une meilleure approche à mon avis serait d'avoir la même structure d'objet retournée dans les deux cas. La différence serait dans ce que contient l'objet.

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}
   }
};

Avec cela, vous pouvez simplement vérifier l'état de l'erreur si vous souhaitez déterminer si les données sont valides ou non en fonction de l'état de la réponse, en vérifiant l'état.

if (data.status === 200) {
   console.log(data)
}
else {
   this.setState({errorStatus: data.status})
}

Pour votre question, je suppose que la demande de publication génère une erreur, elle commence donc par la fonction .then(), puis la demande de publication génère une erreur, qui est interceptée par .error()

0
Woops 1 sept. 2020 à 15:22

Pourquoi ne pas simplement laisser l'erreur passer à la fonction appelante si vous souhaitez gérer l'erreur là-bas?

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 })
  }
}
0
Guerric P 1 sept. 2020 à 15:26