Axios Async-Await в React

Я пытаюсь получить и отправить запрос, каким-то образом состояние было обновлено поздно (должно быть .get, затем .post)

async componentDidMount() {

    const {destination, weight} = this.state;


    axios.get(`https://myapi`)
        .then(res => {
            const customer = res.data;

            this.setState({ customer,
                destination: customer[0].address[0].city,
            }
        })

   axios.post(`https://myapi`, {destination, weight})
        .then((post)=>{
          const delivery = post.data;
            this.setState({ delivery,
              cost: delivery[0].cost[0].value
             });
        });

        return post;
}

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

вот что я пробовал

async componentDidMount() {

        const {destination, weight} = this.state;


        axios.get(`https://myapi`)
            .then(res => {
                const customer = res.data;

                this.setState({ customer,
                    destination: customer[0].address[0].city,
                }
            })

const post = await axios.post(`https://api.cashless.vip/api/cost`, {destination, weight})
            .then((post)=>{
          console.info(this.state.destination);
              const delivery = post.data;
                this.setState({ delivery,
                  cost: delivery[0].cost[0].value
                 });
            });

            return post;
}

я попытался зафиксировать в консоли состояние пункта назначения, и да, оно действительно обновлено. я неправильно делаю асинхронное ожидание? Спасибо за помощь!

Вы пытались сделать это с Promise? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Edgars Salmiņš 29.05.2019 17:06

Если вы используете await, я не понимаю, зачем вам вообще нужен then. Предполагается, что await разворачивает then.

zero298 29.05.2019 17:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
2 482
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
try{
   let res = await axios.get(`https://myapi`);
   if (res) {
     const customer = res.data;
     this.setState({ customer,
        destination: customer[0].address[0].city,
     });
     const postRes = await axios.post(`https://api.cashless.vip/api/cost`);
     if (postRes) {
       const delivery = post.data;
         this.setState({ delivery,
           cost: delivery[0].cost[0].value
         });
     }
   }
}catch (err) {
  console.info(err);
}

Если вы хотите использовать почту снаружи, если это зависит от вас.

Почему, если (рез)? Вы должны добавить асинхронность в этот блок, иначе ожидание не поможет.

henrik123 29.05.2019 17:19

да, асинхронность должна быть добавлена ​​в определение функции, я думаю, что это не вопрос. Что касается if (res), get может вернуть пустой ответ, который включает " " или null, поэтому в этом случае вы не устанавливаете состояние.

Garry 29.05.2019 17:57

он отлично работает, когда я помещаю POST вне if. Большое спасибо!!!!

wlsonf 30.05.2019 05:30

он отлично работает, когда я помещаю POST вне if. Большое спасибо!!!!

wlsonf 30.05.2019 05:30

Другие вопросы по теме