Maison > Article > interface Web > Comment exécuter une fonction de rappel après un traitement asynchrone dans une boucle ForEach ?
Énoncé du problème :
Étant donné un tableau d'éléments, comment pouvons-nous invoquer un fonction de rappel une fois tous les traitements asynchrones terminés dans une boucle forEach ?
Solution 1 : approche basée sur un compteur
<code class="javascript">function callback () { console.log('all done'); } var itemsProcessed = 0; [1, 2, 3].forEach((item, index, array) => { asyncFunction(item, () => { itemsProcessed++; if(itemsProcessed === array.length) { callback(); } }); });</code>
Solution 2 : approche basée sur les promesses
Exécution synchrone :
<code class="javascript">let requests = [1, 2, 3].reduce((promiseChain, item) => { return promiseChain.then(() => new Promise((resolve) => { asyncFunction(item, resolve); })); }, Promise.resolve()); requests.then(() => console.log('done'));</code>
Exécution asynchrone :
<code class="javascript">let requests = [1, 2, 3].map((item) => { return new Promise((resolve) => { asyncFunction(item, resolve); }); }); Promise.all(requests).then(() => console.log('done'));</code>
Solution 3 : Utilisation de la bibliothèque asynchrone
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!