Javascript 如何使用异步等待在for循环内部进行API调用

Javascript 如何使用异步等待在for循环内部进行API调用,javascript,angularjs,Javascript,Angularjs,在承诺中有一个for循环。如何在不使用async await的情况下从getData API获取响应。getData中使用的参数来自for循环 var res = EService.webApi.get.GetActiveData(formModel.project.EID); res.then( async function (result) { //success var data = re

在承诺中有一个for循环。如何在不使用async await的情况下从getData API获取响应。getData中使用的参数来自for循环

var res = EService.webApi.get.GetActiveData(formModel.project.EID);
        res.then(
           async function (result) {
                //success
                var data = result.data;
                var eList= data.BodyData;
                var jList= [];
                for (var i = 0; i < eList.length; i++) {
                        let entity = await getData(eList[i].EntityID);
                        if (eList[i].typeID !== 16) {
                            jList.push({
                                Name: eList[i].Name + " - " + e[i].typeName + " - " + entity.Name,
                                EID: eList[i].EntityID,
                                model: eList[i],
                            });
                        } 
                    }
}

 
var res=EService.webApi.get.GetActiveData(formModel.project.EID);
那么(
异步函数(结果){
//成功
var数据=结果数据;
var eList=data.BodyData;
var jList=[];
对于(变量i=0;i
如果我理解您的要求,听起来您希望立即调用所有异步请求,但让每个请求等待其结果,而不是在每个请求等待前一个操作的情况下串行调用它们。可能是这样的:

for (var i = 0; i < eList.length; i++) {
  (async (j) => {
    // The rest of your logic, but using the passed `j` instead of `i`
  })(i);
}

总体目标是所有操作并行运行,而不是像原始循环那样串行运行。

“在承诺中有一个for循环…”-在您的示例中只有一个
承诺
“可见”,这就是
getData()
的返回值“如何在不使用异步等待的情况下从getdataapi获取响应?”-为什么?您可以改为使用。“getData中使用的参数来自for循环”-您在询问之前是否测试过这个问题?只有一个
i
会导致
eList[i].typeID
抛出错误。@Andreas:我加上了实际的承诺代码。在循环内使用wait可能会影响性能。所以我想检查一下是否可以用其他方法来执行。只需使用
而不是iLife。。。
let promises = [];
for (var i = 0; i < eList.length; i++) {
  promises.push((async (j) => {
    // The rest of your logic, but using the passed `j` instead of `i`
  })(i));
}
Promise.all(promises).then(() => ...);