Maison > interface Web > js tutoriel > Comment séquencer l'exécution d'une promesse avec le passage de paramètres depuis un tableau ?

Comment séquencer l'exécution d'une promesse avec le passage de paramètres depuis un tableau ?

Mary-Kate Olsen
Libérer: 2024-10-20 14:57:02
original
444 Les gens l'ont consulté

How to Sequence Promise Execution with Parameter Passing from an Array?

Exécution séquentielle de promesses avec passage de paramètres à partir d'un tableau

Considérez le scénario dans lequel vous avez un tableau de valeurs (par exemple, myArray) et devez exécuter une promesse- fonction basée sur (par exemple, myPromise) séquentiellement, en passant chaque élément du tableau en tant que paramètre. Comment pouvez-vous implémenter une « boucle pauseable » qui garantit que les promesses sont résolues dans le bon ordre ?

Solution : exécution itérative des promesses

Pour obtenir une exécution séquentielle, vous pouvez utiliser une combinaison d'enchaînement de promesses et le traitement itératif. Voici un extrait de code démontrant comment cela peut être réalisé :

myArray.reduce(
  (p, x) =>
    p.then(() => myPromise(x)),
  Promise.resolve()
)
Copier après la connexion

Cette approche exploite la méthode de réduction pour parcourir le tableau et créer une série de promesses enchaînées. Chaque promesse est résolue une fois la promesse précédente terminée, appliquant ainsi efficacement la séquence d'exécution souhaitée.

Alternative aux fonctions asynchrones

Si vous prenez en charge les fonctions asynchrones, une solution plus propre est disponible en utilisant forEachSeries function :

const forEachSeries = async (iterable, action) => {
  for (const x of iterable) {
    await action(x)
  }
}

forEachSeries(myArray, myPromise)
Copier après la connexion

Cette fonction parcourt le tableau et fait une pause à chaque élément, en attendant que la promesse soit résolue avant de passer à l'itération suivante.

Collecte des résultats

Si vous devez collecter les valeurs de retour des promesses dans un tableau, vous pouvez modifier la fonction forEachSeries comme suit :

const mapSeries = async (iterable, fn) => {
  const results = []

  for (const x of iterable) {
    results.push(await fn(x))
  }

  return results
}
Copier après la connexion

Cette fonction parcourt le tableau, accumule les résultats des promesses dans les résultats tableau, et renvoie enfin les résultats collectés.

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
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal