2016-05-13 15 views
6

Ich benutze the axios versprechen Bibliothek, aber meine Frage gilt allgemeiner glaube ich. Im Moment schleife ich einige Daten und mache einen einzigen REST-Aufruf pro Iteration.
Wenn jeder Aufruf abgeschlossen ist, muss ich den Rückgabewert zu einem Objekt hinzufügen. Auf einem hohen Niveau, sieht es wie folgt aus:Warten auf alle Versprechen in einer Schleife zum Beenden

var mainObject = {}; 

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

console.log(convertToStringValue(mainObject)); 

Was passiert natürlich, wenn ich console.log nennen die mainObject hat keine Daten in es noch nicht, da axios noch erreicht werden. Was ist ein guter Weg, um mit dieser Situation umzugehen?

Axios hat eine all Methode zusammen mit einer Schwester spread ein, aber sie scheinen von Nutzen zu sein, wenn Sie im Voraus wissen, wie viele Anrufe Sie werden machen, während in meinem Fall ich weiß nicht, wie viele Schleifen Iterationen wird es sein.

Antwort

22

Sie müssen alle Ihre Versprechen Array sammeln ein dann verwenden 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)); 

Es in axios docs beschrieben ist

Verwandte Themen