Maison  >  Article  >  interface Web  >  Comment exécuter un rappel après tous les rappels asynchrones dans une boucle « forEach » ?

Comment exécuter un rappel après tous les rappels asynchrones dans une boucle « forEach » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 04:19:03938parcourir

How to Execute a Callback After All Asynchronous Callbacks Within a 'forEach' Loop Finish?

Exécution de rappel asynchrone après l'itération « forEach »

Requête :

Comment un rappel peut-il être exécuté une fois que tous les rappels asynchrones d'une boucle 'forEach' sont terminés ?

Solution :

Array.forEach ne prend pas automatiquement en charge cette fonctionnalité. Il existe cependant plusieurs approches alternatives pour atteindre cet objectif :

1. Compteur :

Gardez une trace du nombre d'articles traités à l'aide d'un compteur. Incrémentez le compteur dans le rappel de chaque opération asynchrone et invoquez le rappel final lorsque le compteur atteint le nombre total d'éléments.

2. Promesses (ES6) :

a. Exécution séquentielle :

La chaîne promet en séquence de garantir l'exécution synchrone des tâches asynchrones, en garantissant que chaque élément est traité dans l'ordre dans lequel il apparaît dans le tableau.

b. Exécution parallèle :

Utilisez la méthode Promise.all() pour exécuter toutes les tâches asynchrones en parallèle sans garantir l'ordre d'exécution.

3. Bibliothèque Async :

Les bibliothèques populaires comme Async.js fournissent des mécanismes pour exprimer le comportement requis, tels que Async#series() et Async#parallel().

Exemple d'implémentation original (synchrone) :

Le code original de la question illustre un scénario synchrone, et l'implémentation suivante peut être utilisée :

posts.foreach(function(v, i) {
  res.write(v + ". index " + i);
});

res.end();

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