Maison  >  Article  >  interface Web  >  Comment exécuter une fonction de rappel après un traitement asynchrone dans une boucle ForEach ?

Comment exécuter une fonction de rappel après un traitement asynchrone dans une boucle ForEach ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 15:10:02218parcourir

How to Execute a Callback Function After Asynchronous Processing within a ForEach Loop?

Achèvement du rappel après un traitement itératif asynchrone

É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

  • Incrémenter un compteur dans chaque rappel asynchrone.
  • Exécuter le rappel « done » lorsque le compteur atteint le nombre total d'éléments.
<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 :

  • Promets en chaîne en utilisant réduire() et Promise.resolve() pour garantir une 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 :

  • Créez un tableau de promesses à l'aide de map().
  • Utilisez Promise.all() pour invoquer le rappel « done » lorsque toutes les promesses sont terminées. résolu.
<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

  • Exploitez les bibliothèques comme async pour simplifier les modèles de programmation asynchrone.
  • Référez-vous à la documentation spécifique pour les mécanismes de complétion de rappel fournis par la bibliothèque.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn