2016-05-13 8 views
6

Używam biblioteki obietnicy the axios, ale moje pytanie dotyczy bardziej ogólnie myślę. Teraz przechodzę do pętli nad niektórymi danymi i wykonuję pojedyncze wywołanie REST na podstawie iteracji.
Po zakończeniu każdego połączenia muszę dodać wartość zwracaną do obiektu. Na wysokim poziomie, to wygląda to tak:Oczekiwanie na wszystkie obietnice wywołane pętlą, aby zakończyć

var mainObject = {}; 

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

console.log(convertToStringValue(mainObject)); 

Co się dzieje jest oczywiście gdy zgłoszę console.logmainObject nie ma żadnych danych w nim jeszcze, ponieważ Axios wciąż dotarcia. Jaki jest dobry sposób radzenia sobie z tą sytuacją?

Axios nie mają all metodę wraz z siostrą spread jeden, ale wydają się być przydatne, jeśli wiesz z wyprzedzeniem, ile połączeń będziesz tworzenia, natomiast w moim przypadku nie wiem ile iteracje pętli będą.

Odpowiedz

22

Musisz zebrać wszystkie swoje obietnice Array następnie użyć 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)); 

Jest opisany w axios docs

Powiązane problemy