Javascript 如何使用异步等待在for循环内部进行API调用
在承诺中有一个for循环。如何在不使用async await的情况下从getData API获取响应。getData中使用的参数来自for循环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
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(() => ...);