javascript - 使用 Mongoose findOne 的函数返回未定义?

标签 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
        });
    });
}

最佳答案

这是异步代码,因此在另一个函数中调用它时,您应该传递回调函数来获取结果:

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

关于javascript - 使用 Mongoose findOne 的函数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885339/

相关文章:

javascript - 为 Meteor 数据创建编号列表

javascript - Angular 异步函数返回未定义而不是 Promise

javascript - 如何遍历对象数组并检查名称是否存在?

c# - 有没有办法获得唯一的计算机 ID?

c# - 等待 MongoConnection 超时

java - Spring mongodb查询包含嵌套数组的嵌套数组

javascript - 阻塞 javascript 执行直到响应完成

javascript - 在 JavaScript 中的异步函数末尾运行同步函数?

javascript - ReactJs - 加载跨域资源

javascript - 在每个数组绘图后更新图表,Highcharts