2017-01-08 2 views
0

Ich versuche, eine asynchrone Art und Weise der Ausführung, um herauszufinden, wie zu implementieren, nachdem eine IterationMit Versprechen nach Iteration beendet

Wesentlichen getan wird Ich habe so etwas wie dies:

data.businesses.map(club => { 
    axios.get(`${ROOT_URL}/club/${currentEmail}/${club.id}`) 
     .then(({data}) => { 
     placeholder.push(Object.assign({}, club, data)) 
     }) 
     .then(() => ..do extra stuff) 
    }) 

    // when data.businesses.map is done iterating all of the elements, do something 

Wie Sie sehen können, ich bin noch neu in der Idee von Promises gibt es einige asynchrone Problem, wenn über axios

Abrufen Abrufen von Informationen, aber ich bin nicht sicher, wo anzuwenden, wenn es anwendbar

Antwort

3

Sie können auf eine Sammlung von Versprechungen warten, die unter Verwendung von Promise.all() zu lösen (oder mindestens eine abzulehnen).

Um diese Sammlung zu sammeln, können Sie die Iterator-Funktion für .map() jede Promise zurückgeben, indem Sie die Klammern aus der Pfeilfunktion entfernen.

let promisedClubs = data.businesses.map(club => 
    axios.get(`${ROOT_URL}/club/${currentEmail}/${club.id}`) 
    .then(({data}) => { 
     placeholder.push(Object.assign({}, club, data)) 
    }) 
    .then(() => ..do extra stuff) 
); 

Promise.all(promisedClubs).then(clubs => { 
    // when data.businesses.map is done iterating all of the elements, do something 
}, failedClub => { 
    // error handling 
}); 
+0

Ehrfürchtig, wusste ich nicht über 'Promise.all()' Danke !! – Alejandro