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()一起执行它们。当所有承诺都得到解决时,这将起作用。

您需要承诺。所有承诺,而不是循环所有承诺。如果不理解,请告诉我,我将为此添加代码。您正在将每次提取的数据保存到相同的状态属性,基本上覆盖了上次提取的数据。那不可能是你想要的。。。?