Gestionnaire de soumission, de Réagir Axios: Post et Get dans le même gestionnaire

0

La question

Je suis en train de créer une application web de téléchargement de fichiers et de fixer l'utilisateur actuel pour le fichier de modèle de clé étrangère. Pour une raison quelconque, la demande est en train d'être effacé, mais il le fait d'abord obtenir l'information nécessaire.

  handleSubmit = (e) => {
    e.preventDefault();
    axios.get('http://127.0.0.1:8000/core/current_user/', {
      headers: {
        Authorization: `JWT ${localStorage.getItem('token')}`,
      }
    }).then((user) => {

      this.state.creator = user.data;
      console.log(this.state.creator);
    })  
    console.log(this.state.creator);
    let form_data = new FormData();
    form_data.append('creator', this.state.creator);
    form_data.append('file', this.state.file);
    form_data.append('title', this.state.title);
    form_data.append('description', this.state.description);
    axios.post('http://localhost:8000/core/posts/', form_data, {
      headers: {
        'Content-Type': 'multipart/form-data',
        Authorization: `JWT ${localStorage.getItem('token')}`,
      }
    }).then(res => {
        console.log(res.data);
      }).catch(err => console.log(err))
  };

La 1ère console est de retourner à l'utilisateur des informations mais la 2ème console renvoie la valeur null. Toute aide sera vraiment appréciée.

api axios javascript react-native
2021-11-23 22:41:32
1

La meilleure réponse

1

Votre then déclaration d'après l'original get se termine à la ligne 11, et le reste de votre code est en dehors de cela.

Avec le code asynchrone, le code en dehors de la then le bloc continue de fonctionner alors qu'il est en attente d'une réponse, donc this.state.creator n'auront pas été encore fixé. Ensuite, il sera de retour pour le code à l'intérieur de la then bloquer une fois la promesse résout.

Vous avez besoin de déplacer l'ensemble de la deuxième bloc de code à l'intérieur de l'initiale then bloc de sorte qu'il n'est exécuté qu'une fois une réponse à l'original get la demande est de retour:

handleSubmit = (e) => {
  e.preventDefault();
  axios
    .get('http://127.0.0.1:8000/core/current_user/', {
      headers: {
        Authorization: `JWT ${localStorage.getItem('token')}`,
      },
    })
    .then((user) => {
      this.state.creator = user.data;
      console.log(this.state.creator);
      let form_data = new FormData();
      form_data.append('creator', this.state.creator);
      form_data.append('file', this.state.file);
      form_data.append('title', this.state.title);
      form_data.append('description', this.state.description);
      axios
        .post('http://localhost:8000/core/posts/', form_data, {
          headers: {
            'Content-Type': 'multipart/form-data',
            Authorization: `JWT ${localStorage.getItem('token')}`,
          },
        })
        .then((res) => {
          console.log(res.data);
        })
        .catch((err) => console.log(err));
    });
};
2021-11-24 00:46:59

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................