Javascript 为什么此DB函数返回未定义?
我正在尝试创建一个可以轻松调用MongoDB的函数 这是功能代码/文件夹: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
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);}
。没别的了。