函数使用Mongoose findOne返回undefined?

时间:2016-10-05 23:43:21

标签: javascript mongodb asynchronous web mongoose

我尝试使用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
        });
    });
}

1 个答案:

答案 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);
});