0

我正在尝试创建一个可以轻松调用我的 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 返回正确的东西: 控制台日志

让我知道是否有人知道此问题的解决方案。

我在这篇文章中找不到答案。如何从异步调用返回响应?

4

1 回答 1

0

您无法返回数据,因为它还不存在。你能做的就是回报一个承诺。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);
}
于 2020-09-28T14:06:44.457 回答