Je suis forEaching sur un objet pour trouver les numéros d'identification, pour ensuite rechercher et renvoyer les documents associés de mongodb.
Je suis capable de consolider les documents dans la fonction forEach, mais je ne peux pas les renvoyer et j'ai du mal à comprendre pourquoi. C'est ma fonction ....
let myFunction = projects.people.forEach(async function (person) { const outputs = await Output.find({ person: person._id }) console.log(outputs) // this works return outputs }) console.log(myFunction) // this does not work
Je ne suis pas sûr de ce que je fais de mal, si c'est parce que c'est asynchrone, ou un forEach (je l'ai essayé avec pour / of et n'a pas pu obtenir cela pour retourner en dehors de la fonction non plus). Quelle est la meilleure façon de retourner ces documents?
4 Réponses :
Essayez map
let myFunction = projects.people.map(async function (person) { const outputs = await Output.find({ person: person._id }) console.log(outputs) // this works return outputs }) console.log(myFunction)
J'ai essayé ceci, j'ai peur que cela n'ait pas fonctionné, il renvoie juste le nombre (personne) d'objets vides.
forEach n'est pas asynchrone que vous pouvez utiliser pour la boucle
for (const person of persons ) { const outputs = await Output.find({ person: person['id'] }) console.log(outputs) // this works return outputs }
@bevc avez-vous essayé cette solution? Je suis juste curieux!
Vous devez appeler log dans une fonction asynchrone si vous souhaitez enregistrer la sortie combinée.
const Output = { find(obj) { return obj; } } const projects = { people: [{ _id: 1 }, { _id: 2 }] } const myFunction = async() => Promise.all(projects.people.map(person => Output.find({ person: person._id }))); async function log() { console.log(await myFunction()); } log();
Vous pouvez utiliser .map ()
pour créer un tableau d’ID, puis utiliser $ in pour les trouver tous dans une seule requête. Quelque chose comme:
let myFunction = await Output.find({ person: { $in: projects.people.map(person => person._id) } }); console.log(myFunction)