Maison > interface Web > js tutoriel > le corps du texte

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
Libérer: 2024-10-28 11:52:00
original
784 Les gens l'ont consulté

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

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

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

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!

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