Javascript 等待循环中调用的所有承诺完成

Javascript 等待循环中调用的所有承诺完成,javascript,promise,axios,Javascript,Promise,Axios,我使用的是promise库,但我认为我的问题更普遍。现在我正在循环一些数据,并在每次迭代中进行一次REST调用。 每次调用完成后,我需要将返回值添加到一个对象。在高层次上,它看起来是这样的: var mainObject = {}; myArrayOfData.forEach(function(singleElement){ myUrl = singleElement.webAddress; axios.get(myUrl) .then(function(response) {

我使用的是promise库,但我认为我的问题更普遍。现在我正在循环一些数据,并在每次迭代中进行一次REST调用。
每次调用完成后,我需要将返回值添加到一个对象。在高层次上,它看起来是这样的:

var mainObject = {};

myArrayOfData.forEach(function(singleElement){
  myUrl = singleElement.webAddress;
  axios.get(myUrl)
  .then(function(response) {
    mainObject[response.identifier] = response.value;
   });
});

console.log(convertToStringValue(mainObject));
当然,当我调用
console.log
时,
main对象中还没有任何数据,因为axios仍在伸出援手。处理这种情况的好方法是什么


Axios确实有一个
all
方法和一个姐妹
spread
方法,但如果您提前知道要打多少电话,它们似乎很有用,而在我的情况下,我不知道会有多少循环迭代。

您需要在一个数组中收集所有承诺,然后使用:

//跨多个站点收集最新堆栈交换问题的示例
//例如助手
康斯特阿皮乌尔酒店https://api.stackexchange.com/2.2/questions?pagesize=1&order=desc&sort=activity&site=',
站点=['stackoverflow'、'ubuntu'、'superuser'],
myArrayOfData=sites.map(函数(站点){
返回{webAddress:apirl+site};
});
函数ConvertToString值(obj){
返回JSON.stringify(obj,null,'\t');
}
//原始问题代码
让mainObject={},
承诺=[];
myArrayOfData.forEach(函数(单元素){
const myUrl=singleElement.webAddress;
promises.push(axios.get(myUrl));
});
承诺。所有(承诺)。然后(功能(结果){
结果:forEach(功能(响应){
const question=response.data.items[0];
mainObject[问题.问题\u id]={
标题:问题,标题,
链接:question.link
};
});
log(convertToStringValue(main对象));
});