Maison > interface Web > js tutoriel > le corps du texte

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

DDD
Libérer: 2024-11-04 13:09:01
original
658 Les gens l'ont consulté

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();
    }
  });
});
Copier après la connexion

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'))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal