Maison > interface Web > js tutoriel > Comment exécuter les promesses en séquence : un guide complet des techniques de synchronisation

Comment exécuter les promesses en séquence : un guide complet des techniques de synchronisation

Patricia Arquette
Libérer: 2024-11-08 21:41:02
original
1038 Les gens l'ont consulté

How to Execute Promises in Sequence: A Comprehensive Guide to Synchronization Techniques

Comment synchroniser une séquence de promesses

Dans cet article détaillé, nous fournirons des techniques complètes pour synchroniser une séquence de promesses, en garantissant qu'elles sont résolues de manière de manière stricte et séquentielle.

Le problème

Vous disposez d'un tableau d'objets de promesse ([p1, p2, p3, ...]) qui doivent être résolus les uns après les autres. La résolution d’une promesse ultérieure nécessite l’achèvement de la précédente. De plus, si une promesse de la séquence est rejetée, la chaîne entière doit être rejetée sans tenter de résoudre d'autres promesses.

Présentation de la solution

Nous aborderons plusieurs solutions, allant de l'itération manuelle à tirant parti des fonctionnalités de la bibliothèque Promise telles que Promise.map() et async/await. Chaque approche illustrera clairement sa mise en œuvre et fournira des exemples pratiques.

Itération manuelle

Approche 1 : Utiliser une boucle While

function sequence(arr) {
  let i = 0;

  const next = () => {
    if (i < arr.length) {
      arr[i++].then(next);
    }
  };
  next();
}
Copier après la connexion

Approche 2 : Utilisation d'une boucle For

function sequence(arr) {
  for (let i = 0; i < arr.length; i++) {
    await arr[i];
  }
}
Copier après la connexion

Promise Library Solutions

Approche 3 : Utilisation de Promise.mapSeries (Bluebird.js)

Promise.mapSeries(arr, (p) => p).then((results) => {
  // Process final results
});
Copier après la connexion

Approche 4 : Utilisation de Promise.mapSeries avec Delay (Bluebird.js)

Promise.mapSeries(arr, (p) => delay(t, p)).then((results) => {
  // Process final results
});

function delay(t, v) {
  return new Promise((resolve) => {
    setTimeout(resolve.bind(null, v), t);
  });
}
Copier après la connexion

Solution Async/Await

async function sequence(arr) {
  const results = [];
  for (let i = 0; i < arr.length; i++) {
    results.push(await arr[i]);
  }
  return results;
}
Copier après la connexion

Avertissements : Gestion des rejets

Il est important de noter que dans ces solutions, si une promesse de la séquence est rejetée, toute la chaîne est interrompue et le rejet se propage. Si vous souhaitez gérer les rejets différemment ou souhaitez plus de contrôle sur le processus, vous devez modifier le code en fonction de vos besoins spécifiques.

Conclusion

Nous avons exploré plusieurs approches pour synchroniser une séquence de promesses, fournissant des solutions manuelles et basées sur une bibliothèque. Le choix de l'approche dépend de vos besoins spécifiques et du contexte de votre candidature.

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