Maison >interface Web >js tutoriel >Comment garantir l'exécution d'une boucle synchrone avec les opérations de promesse ?

Comment garantir l'exécution d'une boucle synchrone avec les opérations de promesse ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 00:13:291058parcourir

How to Ensure Synchronous Loop Execution with Promise Operations?

Coordonner une boucle avec des promesses

Énoncé du problème

Comment pouvons-nous garantir qu'une boucle itère de manière synchrone, en exécutant chaque itération promesse et son opération de journalisation ultérieure (logger.log(res)) dans le bon commander ?

Solution

Éviter PromiseWhile

Bien que la fonction promiseWhile puisse faciliter le bouclage avec des promesses, elle ne garantit pas le ordre d'exécution pour les opérations chaînées.

Utilisation de Réduire pour Sérialisation

Pour maintenir l'ordre souhaité, nous pouvons exploiter Array.prototype.reduce() pour créer une chaîne plate d'opérations .then(). Cela élimine le besoin de récursivité.

<code class="javascript">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());
}</code>

Exemple d'utilisation

<code class="javascript">// Compose an array of email addresses
var arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>

Avantages

Cette approche élimine le variable supplémentaire et fonction de condition requises dans la méthode promiseWhile. De plus, cela simplifie le code et garantit le bon ordre des exécutions de promesses.

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