【发布时间】:2022-01-26 01:44:30
【问题描述】:
我想为我的 discord 机器人制作一个 xp 排行榜。它完美地工作,除了它显示不在服务器中的用户,而是在不同的服务器中。我想出了如何检查该人是否在服务器中,但它返回了一个承诺。 on 消息功能是同步的。如果用户在服务器中,有什么方法可以等待我返回的异步函数?代码如下:
异步函数:
async function validUser(message, i) {
valid = await message.guild.members.fetch(i).then(member => {
console.log(member)
return true
}).catch(err => {
return false
})
console.log(valid)
return valid
}
排行榜代码:
if (typeof i.split('channel')[1] === 'undefined' && await validUser(message, i)) {
if (typeof xpvals[i][2] != 'undefined') {
dudename = xpvals[i][2]
dudexp = xpvals[i][0]
dudefull = [dudename, dudexp]
...
【问题讨论】:
-
我认为你的代码是错误的。当使用 await 时,您不需要使用 then。排行榜代码是同步的?
-
@JRichardsz 你不需要,但你可以。它被设计成这样工作,因为
.then()是可链接的并且总是返回一个 Promise。当你这样做时,await等待链中最后一个.then()返回的承诺,而不是你调用的函数。所以在上面的代码中,await关键字在.then()上运行,而不是在.fetch()上运行
标签: node.js discord.js