2017-09-08 2 views
0

J'ai obtenu des résultats de la base de données (Mongo) une fonction que je sauvegarde la variable de dôme basée sur le résultat, mais je ne peux pas utiliser cette variable dans la fonction hors-côté. comment puis-je accéder à la variable?comment est-ce que je peux faire un résultat assigner mongoose dans la variable globale dans le noeud js?

actuellement, j'ai obtenu un résultat avec dans la fonction en utilisant la console. Mais j'utilise la même variable en dehors indéfini, cependant, j'utilise j'ai fait face à la même erreur undefined. sans une fonction de délai d'attente comment puis-je compléter cela.

 var all_mail; 
 
    mailModel.find({}, function (err, docs) { 
 
       console.log(docs); //Got results this console 
 
       all_mail = docs; 
 
       
 
      }); 
 
    console.log(all_mail); //This is showing undefind

Répondre

1

Vous voulez regarder la façon dont les poignées Node.js comportements asynchrones. Dans ce cas, votre fonction de rappel a uniquement accès à docs dans la portée.

Vous avez raison de penser que si vous attendez assez longtemps, votre variable sera probablement affectée. Cependant, ce n'est vraiment pas la façon de faire les choses.

Très probablement, vous devriez faire ce que vous voulez faire avec docs au sein de la fonction que vous passez à find().

mailModel.find({}, function (err, docs) { 
    doSomething(docs); 
}); 

Cela peut changer radicalement la structure de votre programme. Vous pouvez également utiliser les promesses (http://mongoosejs.com/docs/promises.html) avec Mongoose, puis utiliser async/await tant que votre version du nœud le prend en charge.

Je crois en utilisant des promesses avec await ressemblerait à quelque chose comme:

var docs = await mailModel.find({}).exec(); 
doSomething(docs);