Mongoose查询返回undefined

我试图简单地通过另一个函数返回查询的结果。 在下面的例子中,当我调用gameInit时 ,我需要从DB中获取一个随机单词。 grabWord函数工作正常,我可以在该函数内logging结果。 这是传递给gameInit这是问题。 我知道我需要使用callback,但已经失败了一堆,所以我在这里!

module.exports = { gameInit: function(){ var theWord = module.exports.grabWord(); console.log(theWord); //returns undefined }, grabWord: function () { Word.find({}, function (err, docs){ rand = Math.floor((Math.random() * docs[0].words.length)); myWord = docs[0].words[rand].word; return (myWord); console.log(myWord); // works }); } } 

您可以将callback函数传递给grabWord

 module.exports = { gameInit: function() { this.grabWord(function(word) { console.log('The word is ' + word); }); }, grabWord: function(cb) { Word.find({}, function(err, docs) { rand = Math.floor((Math.random() * docs[0].words.length)); myWord = docs[0].words[rand].word; cb(myWord); }); } } 

或者,使用Promise:

 module.exports = { gameInit: function() { var promise = module.exports.grabWord(); promise.then(function(word) { return word; }).catch(function(err) { console.error('there was an error: ' + err); }) }, grabWord: function() { return new Promise(function(fulfill, reject) { Word.find({}, function(err, docs) { if (err) { reject(err); } else { rand = Math.floor((Math.random() * docs[0].words.length)); myWord = docs[0].words[rand].word; fullfill(myWord); } }); }); } }