【发布时间】:2020-12-01 14:59:49
【问题描述】:
嗨,我是 reactjs 的新手,我正在尝试使用 function 构建 button,并通过 Reactjs 进行一些计算。逻辑是,首先我会通过两个函数从database 中得到两个lists。在这 2 个functions 返回结果和setState 之后,计算函数将继续执行其工作。但不知何故,状态没有被更新,它会崩溃。如何确保在计算之前更新状态?非常感谢!
代码:
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
dividendList : [],
divisorList : [],
};
}
getDividend(){
var self = this;
axios.post(SERVER_NAME + 'api/getDividend', {})
.then(function(response){
let results = response.data;
console.log(results)
self.setState({ dividendList : results.data})
})
.catch(function(err){
console.log(err)
});
}
getDivisor(){
var self = this;
axios.post(SERVER_NAME + 'api/getDivisor', {})
.then(function(response){
let results = response.data;
console.log(results)
self.setState({ divisorList : results.data})
})
.catch(function(err){
console.log(err)
});
}
doCal = () => {
var self = this;
self.getDividend();
self.getDivisor();
const { dividendList , divisorList} = self.state;
# then will loop the list and do math
# but since the state is not update, both lists are empty []
}
尝试过的承诺;
getDivisor(){
var self = this;
return new Promise((resolve, reject) => {
axios.post(SERVER_NAME + 'api/draw/getDivisor', {})
.then(function(response){
resolve(response)
})
.catch(function(err){
resolve();
});
})
}
【问题讨论】:
-
首先
return axios.post(...然后你可以使用async/await(或.then)和Promise.all...顺便说一句,为什么你的网址像@987654335 @ ...为什么是双重的/ -
哦错字,你的意思是在doCal函数中返回axios响应数据和setstate?
-
如果你想等到 axio.post 完成,你需要在那些函数中返回它,然后你可以在 doCal 中使用前面注释中的任何一种方法
标签: javascript reactjs promise