Я пытаюсь получить и отправить запрос, каким-то образом состояние было обновлено поздно (должно быть .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;
}
я попытался зафиксировать в консоли состояние пункта назначения, и да, оно действительно обновлено. я неправильно делаю асинхронное ожидание? Спасибо за помощь!
Если вы используете await
, я не понимаю, зачем вам вообще нужен then
. Предполагается, что await
разворачивает then
.
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);
}
Если вы хотите использовать почту снаружи, если это зависит от вас.
Почему, если (рез)? Вы должны добавить асинхронность в этот блок, иначе ожидание не поможет.
да, асинхронность должна быть добавлена в определение функции, я думаю, что это не вопрос. Что касается if (res), get может вернуть пустой ответ, который включает " " или null, поэтому в этом случае вы не устанавливаете состояние.
он отлично работает, когда я помещаю POST вне if. Большое спасибо!!!!
он отлично работает, когда я помещаю POST вне if. Большое спасибо!!!!
Вы пытались сделать это с Promise? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…