Maison > interface Web > js tutoriel > Comment réaliser un chaînage asynchrone avec des promesses en JavaScript ?

Comment réaliser un chaînage asynchrone avec des promesses en JavaScript ?

Susan Sarandon
Libérer: 2024-12-04 20:11:16
original
806 Les gens l'ont consulté

How to Achieve Asynchronous Chaining with Promises in JavaScript?

Chaînage asynchrone avec des promesses dans JavaScript ES6

L'extrait de code JavaScript fournissait des tentatives de création de promesses dans une boucle, mais échouait en raison de la synchronisation nature de la boucle. Pour résoudre ce problème, nous exigeons que chaque promesse soit créée et résolue séquentiellement, ce qui entraîne un asynchrone.

Il existe plusieurs approches pour réaliser ce chaînage :

Utiliser une boucle For avec un Promesse initiale :

Initialisez une promesse qui se résout immédiatement, puis enchaînez de nouvelles promesses à cette première comme chaque promesse précédente résout.

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

for (let i = 0, p = Promise.resolve(); i < 10; i++) {
    p = p.then(() => delay(Math.random() * 1000))
         .then(() => console.log(i));
}
Copier après la connexion

Utilisation d'Array.reduce avec une promesse initiale :

Similaire à l'approche de la boucle for, utilisez Array.reduce pour enchaîner les promesses, en commençant par un promesse initiale.

[...Array(10).keys()].reduce(
    (p, i) => p.then(() => delay(Math.random() * 1000)).then(() => console.log(i)),
    Promise.resolve()
);
Copier après la connexion

Utilisation d'un chaînage récursif Fonction :

Définissez une fonction qui s'appelle comme un rappel de résolution (comme une chaîne de promesse), en passant l'index actuel comme argument.

const chainPromises = (i = 0) => {
    if (i >= 10) return;

    delay(Math.random() * 1000).then(() => {
        console.log(i);
        chainPromises(i + 1);
    });
};

chainPromises();
Copier après la connexion

Utilisation d'Async /Await (ES2017) :

Utilisez async/await pour suspendre l'exécution de la fonction jusqu'à la promesse résout.

const asyncPromises = async () => {
    for (let i = 0; i < 10; i++) {
        await delay(Math.random() * 1000);
        console.log(i);
    }
};

asyncPromises();
Copier après la connexion

Utilisation de For Await...Of (ES2020) :

Similaire à async/await, utilisez la syntaxe for wait...of pour parcourir un itérable asynchrone.

const asyncPromises = async () => {
    for await (let i of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
        await delay(Math.random() * 1000);
        console.log(i);
    }
};

asyncPromises();
Copier après la connexion

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