2016-05-13 172 views
6

我正在使用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.logmainObject不具有任何數據還,因爲愛可信還是伸手是。處理這種情況的好方法是什麼?

Axios確實有一個all方法以及一個姊妹spread其中一個,但它們似乎是有用的,如果你提前知道你會打多少個電話,而在我的情況下,我不知道有多少循環迭代將會出現。

回答

22

你需要收集所有的承諾數組,然後使用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)); 

它在axios docs

定律描述