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
Patricia Arquetteoriginal
2024-11-08 21:41:021035parcourir

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();
}

Approche 2 : Utilisation d'une boucle For

function sequence(arr) {
  for (let i = 0; i < arr.length; i++) {
    await arr[i];
  }
}

Promise Library Solutions

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

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

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

Solution Async/Await

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

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!

Déclaration:
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