在一个函数中,我循环进行提取调用。
当所有调用结束后,我需要将值保存在变量中,但是对于异步调用而言,这是不可能的。

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');
}


getTotalProjects函数正在执行一个循环,在该循环中调用getReportsGroup(在此处进行提取)。在所有提取的末尾,我需要在getTotalProjects中显示一条消息。当前,它是异步的,它在完成所有提取之前执行console.log('finish all fetch')

最佳答案

您需要等待,直到诺言解决。第一种方法返回promise,然后第二种应用.then

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');
}

10-07 17:23