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

Comment synchroniser une séquence de promesses en JavaScript ?

DDD
Libérer: 2024-11-08 12:54:01
original
575 Les gens l'ont consulté

How can you synchronize a sequence of Promises in JavaScript?

Synchronisation d'une séquence de promesses

Les promesses JavaScript fournissent un mécanisme puissant pour gérer les opérations asynchrones. Cependant, il existe des situations dans lesquelles nous devons synchroniser l'exécution des promesses dans un ordre précis. Ceci est particulièrement difficile lorsque nous voulons éviter une exécution précoce ou des interruptions dues à des promesses ultérieures.

Itération manuelle avec chaînage de promesses

Une approche simple pour synchroniser les promesses consiste à parcourir les manuellement, en enchaînant les promesses les unes après les autres :

function sequence(arr) {
  let index = 0;

  function next() {
    if (index < arr.length) {
      return arr[index++].then(next).catch(e => Promise.reject(e));
    }
  }

  return next();
}
Copier après la connexion

Cette fonction parcourt le tableau des promesses, en résolvant chacune dans l'ordre et en gérant tout rejet.

Utilisation de la bibliothèque de promesses Bluebird

Bluebird est une bibliothèque de promesses populaire qui fournit des fonctionnalités supplémentaires pour le contrôle de la concurrence, notamment :

Promise.mapSeries(arr, function(item) {
  return processItem(item);
}).then(function(results) {
  // process final results here
}).catch(function(err) {
  // process array here
});
Copier après la connexion

Utilisation d'ES7 Async/Await

ES7 introduit la syntaxe async/await, qui simplifie la programmation asynchrone et fournit un moyen naturel de séquencer les promesses :

async function processArray(array, fn) {
  let results = [];
  for (let i = 0; i < array.length; i++) {
    let r = await fn(array[i]);
    results.push(r);
  }
  return results;    // will be resolved value of promise
}
Copier après la connexion

Éviter l'exécution anticipée

Pour empêcher l'exécution anticipée des promesses, vous pouvez les créer dans la boucle au lieu de les déclarer à l'avance. Cela garantit que seule la promesse actuelle est exécutée avant la création de la suivante.

function sequenceDynamic(nextPromise) {
  let index = 0;

  function next() {
    const promise = nextPromise(index);
    if (promise) {
      return promise.then(() => next(++index)).catch(e => Promise.reject(e));
    }
  }

  return next();
}
Copier après la connexion

Cette fonction mise à jour prend une fonction de rappel qui renvoie la prochaine promesse à exécuter. La fonction continue d'itérer tant que le rappel renvoie des promesses valides.

Conclusion

La synchronisation des promesses dans un ordre spécifique peut être obtenue via une itération manuelle, la bibliothèque Bluebird, async /await, ou en évitant une exécution anticipée. Il est important de sélectionner l'approche qui convient le mieux à votre application et à votre environnement de développement.

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