我试图通过另一个函数简单地返回查询结果。在下面的示例中,当我调用 gameInit 时,我需要从数据库中获取一个随机字。 grabWord 功能正常,我可以在该功能中记录结果。它回传给gameInit就是问题所在。我知道我需要使用回调但是已经失败了很多次,所以我在这里!
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
});
}
}
答案 0 :(得分:2)
您可以将回调函数传递给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);
});
}
}
或者,使用Promises:
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);
}
});
});
}
}