Maison  >  Article  >  interface Web  >  Comment implémenter un rappel d'achèvement pour les boucles forEach asynchrones ?

Comment implémenter un rappel d'achèvement pour les boucles forEach asynchrones ?

DDD
DDDoriginal
2024-11-04 13:09:01659parcourir

How to Implement a Completion Callback for Asynchronous forEach Loops?

Rappels forEach asynchrones : implémentation d'un rappel d'achèvement

Dans les scénarios où une boucle asynchrone comme forEach est utilisée, il est souvent nécessaire de déclencher un rappel une fois que toutes les opérations asynchrones sont terminées. Ce guide présente plusieurs approches pour réaliser cette fonctionnalité.

1. Utilisation d'un compteur simple

Cette technique utilise un compteur qui s'incrémente à chaque fois qu'un élément est traité. Lorsque le compteur atteint le nombre total d'éléments, le rappel d'achèvement est invoqué.

function callback () { console.log('all done'); }

var itemsProcessed = 0;

[1, 2, 3].forEach((item, index, array) => {
  asyncFunction(item, () => {
    itemsProcessed++;
    if(itemsProcessed === array.length) {
      callback();
    }
  });
});

2. Tirer parti des promesses ES6

Les promesses permettent de créer une chaîne de promesses séquentielles, garantissant une exécution synchrone des tâches asynchrones.

function asyncFunction (item, cb) {
  setTimeout(() => {
    console.log('done with', item);
    cb();
  }, 100);
}

let requests = [1, 2, 3].reduce((promiseChain, item) => {
    return promiseChain.then(() => new Promise((resolve) => {
      asyncFunction(item, resolve);
    }));
}, Promise.resolve());

requests.then(() => console.log('done'))

3. Utiliser une bibliothèque asynchrone

Les bibliothèques comme « async » fournissent des mécanismes pour exprimer la fonctionnalité souhaitée. L'implémentation spécifique variera en fonction de la bibliothèque choisie.

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