"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-18
Parcourir:215

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 disposez d'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()
)

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 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)

Cette fonction parcourt le tableau et s'arrête à 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
}

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

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729407377. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3