为什么此数据库函数返回未定义的值?

问题描述

我正在尝试创建一个可以轻松调用MongoDB的函数

这是功能代码/句柄:

let get = {};

get.getGuildData = (id) => {
    const guildData = require('./models/guilds.js')
    guildData.findById(id).then(async (data) => {
    return guildData.findById(id)
    })
};

module.exports = { get }

这是我调用函数的地方:

const getGuild = bee.get.getGuildData(msg.guildID)
console.log(getGuild)

它返回未定义,但是实际函数上的console.log返回正确的值:

Console.logs

让我知道是否有人知道解决方案。

我无法找不到在这文章中找到答案。 How do I return the response from an asynchronous call?

解决方法

您无法返回数据,因为它尚不存在。您可以做的就是兑现承诺。 guildData.findById(id)显然已经在返回一个可以解决数据的承诺,因此您无需在其上调用.then即可创建新的承诺。

get.getGuildData = (id) => {
  const guildData = require('./models/guilds.js')
  return guildData.findById(id);
};

由于该函数现在正在返回promise,因此任何调用该函数的代码都需要使用promise。在诺言上致电.then

bee.get.getGuildData(msg.guildID)
  .then(data => {
    console.log(data);
  });

或者,如果您使用的是异步功能,请使用await:

async function someFunction() {
  const data = await bee.get.getGuildData(msg.guildID);
  console.log(data);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...