Maison > interface Web > js tutoriel > Comment garantir l'exécution synchrone du code basé sur les promesses dans une boucle ?

Comment garantir l'exécution synchrone du code basé sur les promesses dans une boucle ?

Susan Sarandon
Libérer: 2024-10-26 19:22:30
original
331 Les gens l'ont consulté

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

Trouver la structure de boucle correcte pour garantir que le code basé sur les promesses s'exécute de manière synchrone

Lorsque vous travaillez avec du code basé sur des promesses, la structure de boucle correcte est essentiel pour garantir l’exécution synchrone des opérations asynchrones. Dans le scénario donné, l'objectif est de construire une boucle qui assure l'exécution de "db.getUser(email).then(function(res) { logger.log(res); })" dans le bon ordre lors de chaque itération.

Une approche utilise une fonction "promiseWhile" personnalisée. Bien que cette méthode puisse être utile pour des scénarios généraux, elle introduit une complexité inutile pour le cas spécifique en question. Au lieu de cela, une solution plus simple consiste à exploiter les fonctions intégrées de manipulation de tableaux telles que map() et réduire().

Promesses parallèles ou série

Le problème réside dans l'obligation de conserver l'ordre des réponses, ce qui élimine l'utilisation d'une approche parallèle via Array.prototype.map(). Pour construire la chaîne de promesse souhaitée avec un ordre préservé, Array.prototype.reduce() est plus adapté.

Exemple :

function fetchUserDetails(arr) {
    return arr.reduce(function(promise, email) {
        return promise.then(function() {
            return db.getUser(email).done(function(res) {
                logger.log(res);
            });
        });
    }, Promise.resolve());
}
Copier après la connexion

En utilisant cette méthode, l'exécution du fichier "db. getUser" est garanti en série, garantissant que l'ordre des résultats est maintenu. Le code peut être appelé comme suit :

var arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});
Copier après la connexion

Cette approche élimine le besoin de boucles ou de conditions complexes et garantit la bonne exécution de la chaîne de promesses, même lorsqu'il s'agit d'opérations asynchrones.

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