为什么这个数据库函数返回未定义?

Why is this DB function returning undefined?

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

的函数

这是函数code/hanlder:

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)

它 returns 未定义,但是 console.log 在实际函数上 returns 是正确的:

如果有人知道这个问题的解决方案,请告诉我。

不能在这个post中找到答案。 How do I return the response from an asynchronous call?

您不能 return 数据,因为它还不存在。你能做的就是return一个承诺。 guildData.findById(id) 显然已经 return 一个解析为数据的承诺,所以你不需要调用 .then 它来创建一个新的承诺。

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

由于该函数现在 return 是一个 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);
}