Maison >interface Web >js tutoriel >Comment exécuter les promesses en séquence : un guide complet des techniques de synchronisation
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.
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.
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.
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]; } }
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); }); }
async function sequence(arr) { const results = []; for (let i = 0; i < arr.length; i++) { results.push(await arr[i]); } return results; }
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.
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!