Javascript 为什么此DB函数返回未定义?

Javascript 为什么此DB函数返回未定义?,javascript,node.js,mongoose,eris,Javascript,Node.js,Mongoose,Eris,我正在尝试创建一个可以轻松调用MongoDB的函数 这是功能代码/文件夹: let get={}; get.getGuildData=(id)=>{ const guildData=require('./models/guilds.js') guildData.findById(id).then(异步(数据)=>{ 返回guildata.findById(id) }) }; module.exports={get} 这就是我调用函数的地方: const getGuild = bee.get.g

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

这是功能代码/文件夹:

let get={};
get.getGuildData=(id)=>{
const guildData=require('./models/guilds.js')
guildData.findById(id).then(异步(数据)=>{
返回guildata.findById(id)
})
};
module.exports={get}
这就是我调用函数的地方:

const getGuild = bee.get.getGuildData(msg.guildID)
console.log(getGuild)
它返回undefined,但实际函数上的console.log返回正确的内容:

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


我能在这篇文章中找到答案

您无法返回数据,因为它还不存在。你能做的就是回报一个承诺
guiddata.findById(id)
显然已经返回了一个解析为数据的承诺,因此您不需要调用
。然后
来创建一个新的承诺

get.getGuildData = (id) => {
  const guildData = require('./models/guilds.js')
  return guildData.findById(id);
};
由于函数现在返回承诺,因此任何调用它的代码都需要使用承诺。请致电
。然后
承诺:

bee.get.getGuildData(msg.guildID)
  .then(data => {
    console.log(data);
  });
或者,如果您使用的是异步函数,请使用wait:

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

另外,请注意,返回最后一个操作,因此
data,console.log('returned data:',data)
将返回
console.log
的返回值,它是
未定义的
getguildata
不会
返回任何内容。其中的嵌套函数有一个
return
语句,但这与
getGuildData
本身返回的内容无关。@Bee您无法返回数据,因为它还不存在。你可以回报一个承诺
guildata.findId(id)
已经创建了一个将解析数据的承诺,因此函数的最后一行应该是
return guildata.findById(id)
@NicholasTower我刚刚将其放入并运行,仍然返回未定义。是的,不,仍然是相同的问题。您只需要
(id)=>{const guildata=require(…);返回guildata.findById(id);}
。没别的了。