我现在的函数有一个问题,我用MongoDB数据库来检查数据是否存在,如你所见,如果数据值为真,我想把函数的返回值设为假,如果数据值为错,它应该返回假。
一切工作到这一点。函数只是返回“未定义”。我尝试了一切我能想到的,并测试了至少一个小时,但没有找到任何解决方案。
我希望你们中的任何人可以帮助我在这里返回一个真或假。谢谢你的帮助:D
**注意:**以前也尝试过异步,但没有成功
function CheckActiveGamesPlayer1(memberid) {
console.log("3")
db.findOne({ GuildID: guild.id, Player1: memberid }, async(err, data) => {
if (data.Ingame === true) {
console.log("4")
Embed.setDescription(`<@${memberid}> is in an active game. Can't start the game!`).setColor("RANDOM");
channel.send({ embeds: [Embed], ephemeral: true })
return false;
} else {
console.log("5")
return true;
}
})
}
3条答案
按热度按时间wyyhbhjk1#
这是因为在
CheckActiveGamesPlayer1
中实际上没有返回任何东西,但是在db.findOne
回调中返回了一些东西。我不确定您是如何调用
CheckActiveGamesPlayer1
函数的,但我建议返回一个Promise
,这样您就可以通过await
或.then
来获得您所需的响应。然后可以调用函数并通过
.then
获得响应IE:
您也可以将
async
添加到CheckActivePlayers1
函数中,这样您就可以等待它了。IE:
型
我不确定你使用的是哪个版本的mongo,但是你可以返回
db.findOne
,只要它返回一个承诺,你目前使用db.findOne
的方式是回调的形式,所以如果你走这条路,会有一些代码重新排列。https://www.mongodb.com/docs/drivers/node/current/usage-examples/findOne/
yb3bgrhw2#
尝试类似这样的操作。db。findOne可能返回一个promise,因此您可以执行
await db.findOne
而不是提供回调,然后您可以像正常一样返回。waxmsbnn3#
这不是一个异步函数。你的函数先运行,返回undefined。然后,异步回调被调用,但是那个值没有传递给任何东西。
解决这个问题的一个方法是将其设置为异步函数,然后使用“await”关键字。