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
Libérer: 2024-12-27 03:02:13
original
536 Les gens l'ont consulté

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);
        });
    });
}
Copier après la connexion

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
    });
Copier après la connexion

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