我尝试使用Mongoose从数据库中使用Math.random和Mongoose的findOne提取随机值。在我的函数中,定义了我得到的值;但是当我在另一个类中调用该函数时,我收到一个未定义的值。我知道这是因为Javascript的异步性质,但我不确定如何解决这个问题。任何建议将不胜感激!
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
});
});
}
答案 0 :(得分:1)
它的异步代码,所以在你调用它时的另一个函数你应该传递回调函数来获得结果:
export const getRandomItem2 = (callback) => {
Item
.count()
.exec((err, count) => {
Item
.findOne(Math.floor(Math.random() * count))
.skip(skip)
.exec((err, item) => callback(item));
});
}
在另一个地方:
getRandomItem2(item => {
console.log(item);
});