É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!