2016-10-05 4 views
0

Ich versuche, Mungo zu verwenden, um einen zufälligen Wert aus einer Datenbank mit Math.random und Mongoose findOne zu ziehen. Innerhalb meiner Funktion ist der Wert definiert, den ich erhalte; Wenn ich die Funktion in einer anderen Klasse aufruft, erhalte ich einen undefinierten Wert. Ich weiß, dass dies wegen der asynchronen Natur von Javascript ist, aber ich bin nicht sicher, wie man das repariert. Jeder Rat würde geschätzt werden!Funktion mit Mongoose findOne zurück undefined?

export const getRandomItem2 = (req, res) => { 
    var toReturn; 
    Item.count().exec(function(err, count){ 

    var random = Math.floor(Math.random() * count); 
    Item.findOne().skip(random).exec(
     function (err, result) { 
      toReturn = result.description; 
      console.log('toReturn populated here!' + toReturn); 
      return toReturn; //this is returning undefined 
     }); 
    }); 
} 

Antwort

1

Es ist asynchroner Code, so in einer anderen Funktion, wenn Sie es so nennen sollten Sie Callback-Funktion übergeben das Ergebnis zu erhalten:

export const getRandomItem2 = (callback) => { 
    Item 
     .count() 
     .exec((err, count) => { 
     Item 
      .findOne(Math.floor(Math.random() * count)) 
      .skip(skip) 
      .exec((err, item) => callback(item)); 
     }); 
} 

und in einigen anderen Ort:

getRandomItem2(item => { 
    console.log(item); 
}); 
Verwandte Themen