Обработчик отправки, Реагируйте на Axios: Опубликуйте и получите тот же обработчик

0

Вопрос

Я пытаюсь создать веб-приложение, которое загружает файл и прикрепляет текущего пользователя к файловой модели в качестве внешнего ключа. По какой-то причине запрос get стирается, но он изначально получает необходимую информацию.

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

1 - я консоль возвращает информацию о пользователе, но 2-я консоль возвращает значение null. Любая помощь будет очень признательна.

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

Лучший ответ

1

Ваш then заявление после оригинала get заканчивается в строке 11, а остальная часть вашего кода находится за ее пределами.

С асинхронным кодом код за пределами then блок будет продолжать работать, пока он ждет ответа, так что this.state.creator еще не будет установлено. Затем он вернется к коду внутри then заблокируйте, как только обещание будет выполнено.

Вам нужно переместить весь второй блок кода внутрь внутреннего then блок, поэтому он выполняется только один раз в ответ на исходный get запрос вернулся:

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

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................