我使用the axios承诺库,但我认为我的问题更为普遍。现在,我循环遍历一些数据并在每次迭代时进行一次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
mainObject
尚未包含任何数据时,我们发生了什么事情,因为axios仍在接触。处理这种情况的好方法是什么?
Axios确实有一个all
方法和一个姐妹spread
,但如果你提前知道你将要拨打多少电话,它们似乎是有用的,而在我的情况我不知道会有多少循环迭代。
答案 0 :(得分:42)
您需要收集数组中的所有承诺,然后使用axios.all
:
var mainObject = {},
promises = [];
myArrayOfData.forEach(function(singleElement){
myUrl = singleElement.webAddress;
promises.push(axios.get(myUrl))
});
axios.all(promises).then(function(results) {
results.forEach(function(response) {
mainObject[response.identifier] = response.value;
})
});
console.log(convertToStringValue(mainObject));
中描述了它