Javascript 同步抓取-ReactJS
在一个函数中,我循环,在其中我进行获取调用。 当所有调用完成后,我需要将值保存在一个变量中,但这不可能与调用异步Javascript 同步抓取-ReactJS,javascript,reactjs,asynchronous,synchronous,Javascript,Reactjs,Asynchronous,Synchronous,在一个函数中,我循环,在其中我进行获取调用。 当所有调用完成后,我需要将值保存在一个变量中,但这不可能与调用异步 getReportsGroup(bukrs){ //TOTAL DE UN GRUPO DE PROYECTO fetch('api/Reports/GetDataIRPA?SETCLASS=' + this.state.SETCLASS ', { method: 'GET', headers: { 'Acce
getReportsGroup(bukrs){
//TOTAL DE UN GRUPO DE PROYECTO
fetch('api/Reports/GetDataIRPA?SETCLASS=' + this.state.SETCLASS ', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
this.setState({
reportIRPA: data
});
});
}
getTotalProjects(){
//Recorrer proyectos seleccionados
for (var i = 0; i < this.state.selectProjects.length; i++) {
this.getReportsGroup(this.state.selectProjects[i].bukrs);
}
console.log('finish all fetch');
}
getReportsGroup(bukrs){
//项目总收入
fetch('api/Reports/GetDataIRPA?SETCLASS='+this.state.SETCLASS'{
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”,
}
})
.then(response=>response.json())
。然后(数据=>{
这是我的国家({
reportIRPA:数据
});
});
}
getTotalProjects(){
//自选校正程序
for(var i=0;i
getTotalProjects
函数正在执行一个循环,在该循环中调用getReportsGroup
(在此处进行提取)。在所有回迁结束时,我需要在getTotalProjects
中显示一条消息。目前,由于是异步的,它在完成所有提取之前执行console.log('finishall fetch')
。您需要等待承诺解决。第一种方法返回承诺,然后应用第二种方法
getReportsGroup(bukrs){
//TOTAL DE UN GRUPO DE PROYECTO
return fetch('api/Reports/GetDataIRPA?SETCLASS=' + this.state.SETCLASS ', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
this.setState({
reportIRPA: data,
});
});
}
getTotalProjects(){
//Recorrer proyectos seleccionados
var promises = []; //array of promises
for (var i = 0; i < selectProjects.length; i++) {
var promise = this.getReportsGroup(selectProjects[i].bukrs); //single promise
promises.push(promise);
}
Promise.all(promises ).then(function() {
console.log("DISPLAY your Message here"); // display here
});
console.log('finish all fetch');
}
getReportsGroup(bukrs){
//项目总收入
返回fetch('api/Reports/GetDataIRPA?SETCLASS='+this.state.SETCLASS'{
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”,
}
})
.then(response=>response.json())
。然后(数据=>{
这是我的国家({
报告IRPA:数据,
});
});
}
getTotalProjects(){
//自选校正程序
var promissions=[];//承诺数组
对于(var i=0;i
您可以将代码转换为承诺,并使用承诺而不是直接获取调用。
将每个调用转换为承诺,并使用promise.all()一起执行它们。当所有承诺都得到解决时,这将起作用。您需要承诺。所有承诺,而不是循环所有承诺。如果不理解,请告诉我,我将为此添加代码。您正在将每次提取的数据保存到相同的状态属性,基本上覆盖了上次提取的数据。那不可能是你想要的。。。?