Comment utiliser la fonction promise dans la boucle forEach pour remplir un objet
Je suis en cours d'exécution d'une boucle forEach sur un tableau et de faire deux appels qui, de retour de promesses, et je veux remplir un objet dire this.options
et ensuite faire d'autres choses avec elle. Droit maintenant, je suis en cours d'exécution dans le async problème si j'utilise l'exemple de code suivant et je le puis, fonction première.
$.when.apply($, someArray.map(function(item) {
return $.ajax({...}).then(function(data){...});
})).then(function() {
//all ajax calls done now
});
Ce travail est de code ci-dessous, mais il ne fonctionne que pour le premier élément dans le tableau, parce que j'appel la fonction obtenue dans le .then
de la réponse. Je veux faire tout le parcours de la première pour tous les éléments de la matrice, puis d'appeler la fonction résultant de faire quelque chose.
array.forEach(function(element) {
return developer.getResources(element)
.then((data) = > {
name = data.items[0];
return developer.getResourceContent(element, file);
})
.then((response) = > {
fileContent = atob(response.content);
self.files.push({
fileName: fileName,
fileType: fileType,
content: fileContent
});
self.resultingFunction(self.files)
}).catch ((error) = > {
console.log('Error: ', error);
})
});
Comment dois-je remplir le self.files
objet après la boucle forEach est complet, et ensuite appeler la fonction obtenue avec les fichiers d'objet?
source d'informationauteur rond
Vous devez vous connecter pour publier un commentaire.
Promise.all()
sera utile ici:Cela démarre l'appel AJAX pour chacun des items, ajoute le résultat de chaque appel à
self.files
une fois que l'appel est terminé et les appelsself.resultingFunction()
après tous les appels ont été achevés.Edit: Simplifié basé sur Yury Tarabanko suggestions.
Juste une légère variation de la solution retenue ci-dessus serait:
Vous pourriez regarder cette réponse à une question similaire pour un excellent indice. La solution étant donné que l'on utilise
Array#reduce()
pour éviter d'avoir à accumuler toutes les Promesses avant de faire le travail plutôt que d'utiliserPromise.all()
.Le code suivant est simple compréhension de la synchronisation à l'aide de la Promesse.
Exemple ci-dessus va tenir tableau nums pendant 5 secondes. et il sera imprimé sur la console après la libération.