Maison  >  Article  >  interface Web  >  Voici quelques titres de style question qui correspondent à l’article fourni : * Comment réaliser une exécution synchrone avec des chaînes de promesses : un guide des techniques simplifiées de « promiseWhile » et de réduction de tableau *S

Voici quelques titres de style question qui correspondent à l’article fourni : * Comment réaliser une exécution synchrone avec des chaînes de promesses : un guide des techniques simplifiées de « promiseWhile » et de réduction de tableau *S

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 11:52:00707parcourir

Here are a few question-style titles that fit the provided article:

* How to Achieve Synchronous Execution with Promise Chains: A Guide to Simplified `promiseWhile` and Array Reduction Techniques
* Synchronous Promise Loops Made Easy:  `PromiseWhile` and

Comment créer des boucles synchrones avec des chaînes de promesses

Problème :

Construire une boucle pour garantir l’exécution synchrone des appels de promesse et des instructions de journalisation ultérieures peut s’avérer difficile. Cela est particulièrement vrai lorsque vous utilisez des bibliothèques comme Bluebird.

Solution 1 (fonction promiseWhile simplifiée) :

<code class="javascript">var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    loop();

    return resolver.promise;
};</code>

Cette version simplifiée de la fonction promiseWhile nécessite de transmettre des rappels comme arguments aux paramètres de condition et d'action.

Solution 2 (utilisation de la réduction de tableau) :

Une approche alternative consiste à réduire un tableau d'adresses e-mail et à créer un async correspondant appel pour chacun :

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

Cette approche crée une chaîne plate .then() et maintient l'ordre d'origine des réponses.

Utilisation :

L'appel de fetchUserDetails nécessite un tableau d'adresses e-mail :

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

Cette approche élimine le besoin d'un compteur externe ou d'une fonction de condition. La limite est déterminée par la longueur du tableau d'e-mails.

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