Maison >interface Web >js tutoriel >Comment suspendre l'exécution jusqu'à ce que plusieurs promesses soient résolues ?

Comment suspendre l'exécution jusqu'à ce que plusieurs promesses soient résolues ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 03:02:13540parcourir

How to Pause Execution Until Multiple Promises Resolve?

Renvoyer plusieurs promesses et suspendre l'exécution jusqu'à ce que tout soit terminé

Vous devez gérer plusieurs opérations asynchrones avec une méthode qui renvoie des promesses. Une fois ces opérations terminées, vous souhaitez exécuter un autre ensemble de code uniquement lorsque toutes les promesses ont été résolues.

Promesses dans doSomeAsyncStuff()

Votre fonction doSomeAsyncStuff() doit rendre une promesse. Cette promesse reflète l'achèvement de la tâche asynchrone :

function doSomeAsyncStuff() {
    return new Promise((resolve, reject) => {
        var editor = generateCKEditor();
        editor.on('instanceReady', () => {
            doSomeStuff();
            resolve(true);
        });
    });
}

Utilisation de Promise.all()

Une fois que votre fonction asynchrone renvoie une promesse, vous pouvez utiliser Promise. all() pour regrouper ces promesses en une seule Promesse :

const promises = [];

for (let i = 0; i < 5; i++) {
    promises.push(doSomeAsyncStuff());
}

Promise.all(promises)
    .then(() => {
        for (let i = 0; i < 5; i++) {
            doSomeStuffOnlyWhenTheAsyncStuffIsFinish();
        }
    })
    .catch((error) => {
        // Handle errors here
    });

Exemple

Vous trouverez ci-dessous un exemple qui enregistre un message une fois les cinq tâches asynchrones terminées :

function doSomethingAsync(value) {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log("Resolving " + value);
            resolve(value);
        }, Math.floor(Math.random() * 1000));
    });
}

function test() {
    const promises = [];

    for (let i = 0; i < 5; i++) {
        promises.push(doSomethingAsync(i));
    }

    Promise.all(promises)
        .then((results) => {
            console.log("All done", results);
        })
        .catch((error) => {
            // Handle errors here
        });
}

test();

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