Sto effettuando più query mongoDB in loop. e voglio inviare tutti i risultati come un unico array di dati. Ma quando uso il ritorno per inviare i dati, semplicemente restituisco undefined e non attendo i risultati di tutte le richieste DB. Ho anche provato a usare q.moulde ma lo stesso problema.Problema nel restituire i dati recuperati dalle query DB richiamate nel ciclo
Codice:
var getPrayerInCat = function(data){
var result ;
var finalData = [];
if(data.length >0){
data.forEach(function(data2){
var id= data2.id;
Prayer.find({prayerCat:id},function(err,prayer){
var deferred = Q.defer()
if (err) { // ...
console.log('An error has occurred');
// res.send(err);
result= finalData = err
} else {
if(!prayer){
// console.log(data2.id+'--0');
data2.prayersCount = 0;
result = deferred.resolve(finalData.push(data2))
} else {
// console.log(data2.id+'--'+prayer.length);
data2.prayersCount = prayer.length;
// console.log(prayer)
result = deferred.resolve(finalData.push(data2))
} // else for data forward
}
deferred.promise;
})
// deferred.resolve(finalData);
})
/*if(finalData.length > 0) { return finalData;}*/
}
}
FinalData viene restituito indefinito.
Qual è 'q.moulde'? – Bergi
è una promessa. Posso rimuoverlo, stavo cercando di risolvere il problema, quindi ho provato questa cosa –
La funzione 'getPrayerInCat()' non restituisce nulla o restituisce nulla a un callback. Inoltre, sarebbe utile se si rimuovessero i commenti dal codice e si aggiornasse il post per includere ciò che dovrebbe essere l'output escluso. E dovresti tornare "deferred.promise;", invece di mostrarlo? –