Problème de renvoi de données à partir de plusieurs requêtes de base de données dans une boucle
Lors de l'exécution de plusieurs requêtes de base de données dans une boucle, il est essentiel de gérer les opérations asynchrones correctement pour garantir que toutes les données sont récupérées avant de les renvoyer à votre client.
Dans le code fourni, le La fonction getPrayerInCat exécute plusieurs requêtes MongoDB à l'aide du rappel forEach. Cependant, le code renvoie immédiatement undefined car la fonction n'attend pas la fin des résultats de toutes les requêtes de base de données.
Pour résoudre ce problème, nous devons respecter les principes suivants lorsque nous travaillons avec des promesses :
En utilisant ces principes, nous pouvons créer une version de la fonction getPrayerCount qui renvoie un promesse :
function getPrayerCount(data2) { var id = data2.id; return find({prayerCat:id}) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }
Pour gérer plusieurs tâches asynchrones et attendre leur achèvement, nous pouvons utiliser Q.all :
function getPrayerInCat(data) { var promises = data.map(getPrayerCount); // don't use forEach return Q.all(promises); }
En renvoyant une promesse de la fonction getPrayerInCat, nous pouvons attendre que toutes les requêtes soient terminées avant de renvoyer les résultats.
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!