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

Comment garantir que les requêtes de base de données se terminent avant de renvoyer les résultats en boucle avec MongoDB et Q Promises ?

DDD
Libérer: 2024-11-10 17:34:03
original
940 Les gens l'ont consulté

How to Ensure Database Queries Finish Before Returning Results in a Loop with MongoDB and Q Promises?

Problème lors du renvoi des résultats récupérés à partir de requêtes de base de données effectuées dans une boucle

Dans cette requête, l'objectif est d'effectuer plusieurs requêtes MongoDB dans un bouclez et envoyez les résultats combinés sous la forme d’un seul tableau de données. Cependant, l'utilisation de return dans la boucle n'attend pas la fin des requêtes de la base de données, ce qui entraîne une réponse indéfinie. Même l'utilisation de Q.moulde ne résout pas le problème.

Code modifié :

var getPrayerInCat = function(data){
    var promises = data.map(function(data2){
        var id = data2.id;
        return Q.nbind(Prayer.find, Prayer)({prayerCat:id})
            .then(function(prayer) {
                if(!prayer) data2.prayersCount = 0;
                else data2.prayersCount = prayer.length;
                return data2;
            })
    });
    return Q.all(promises);
}
Copier après la connexion

Explication :

  1. Q.nbind : Cette fonction convertit la méthode Prayer.find en une fonction qui renvoie une promesse Q.
  2. Promesses de chaîne : Chaque itération de la boucle renvoie désormais une promesse qui se résout avec l'objet de données mis à jour.
  3. Q.all : Cette fonction combine toutes les promesses en une seule promesse qui se résout avec un tableau contenant tous les objets de données mis à jour une fois que toutes les requêtes de base de données ont été terminé.
  4. return Q.all(promises);: Cette ligne garantit que la fonction attend que toutes les requêtes de base de données soient terminées et renvoie le résultat combiné.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal