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

Comment exécuter une séquence de promesses dans l'ordre et gérer les refus ?

Susan Sarandon
Libérer: 2024-11-24 13:18:11
original
931 Les gens l'ont consulté

How to Execute a Sequence of Promises in Order and Handle Rejections?

Comment synchroniser une séquence de promesses

Dans ce scénario, vous devez vous assurer que :

  • Les promesses sont résolues de la même manière ordre dans lequel ils sont répertoriés dans le tableau.
  • Si un élément est rejeté, la séquence entière doit rejeter.

Bien qu'il n'existe pas de solution intégrée directe pour cela, voici des moyens d'obtenir ce comportement :

Itération manuelle utilisant la récursion :

function sequence(arr) {
  const index = 0;

  function next() {
    if (index < arr.length) {
      arr[index]().then(next).catch(reject);
      index++;
    }
  }
  next();
}
Copier après la connexion

Utilisation Réduire :

function sequence(arr) {
  return arr.reduce((p, item) => {
    return p.then(() => item()); // Assuming each element is a promise-returning function
  }, Promise.resolve());
}
Copier après la connexion

Utilisation de Promise.mapSeries :

Si vous utilisez la bibliothèque Bluebird Promise, vous pouvez utiliser sa méthode Promise.mapSeries :

function sequence(arr) {
  return Promise.mapSeries(arr, item => item());
}
Copier après la connexion

Utiliser ES7 Async/Await :

Si pris en charge, vous pouvez utiliser async/await pour y parvenir :

async function sequence(arr) {
  const results = [];
  for (let item of arr) {
    results.push(await item());
  }
  return results;
}
Copier après la connexion

Utilisation de la bibliothèque spex :

La bibliothèque spex fournit une méthode de séquence qui vous permet de parcourir une séquence de dynamiques promesses :

import { sequence } from 'spex';

function sequence(nextPromise) {
  // while nextPromise() creates and returns another promise, continue resolving it;
}
Copier après la connexion

N'oubliez pas que si un élément du tableau est rejeté, la séquence sera rejetée dès que ce rejet est rencontré. Ce comportement garantit que d'autres éléments ne sont pas traité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.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