异步/等待在 forEach 循环中给出 [object Promise]

问题描述

我知道很多问题已经得到解答,但无论我尝试什么,它都无法如我所愿。

我正在尝试在我的 discord bot 上制作一种排行榜,这部分工作正常,但是如果您熟悉 minecraft 游戏,您就会知道每个用户都有一个 UUID,并且我有玩家的 UUID我的数据,在继续代码之前,我需要 ASYNC/AWAIT 将 de UUID 转换为玩家的用户名。然而,ASYNC/AWAIT 在 forEach 循环中根本不起作用。

这是我的代码

const { MessageEmbed } = require("discord.js");
const mcapi = require('mcapi');
const { blue_light,red_light } = require(`../../colours.json`);
const eventogxp = require(`../../models/eventogxpModel`)

run: async (client,message,args) => {
        
        var data = await eventogxp.find({
            __v: 0
        }).sort([[
            'quantiagxp','descending'
        ]])
    
    const generateEmbed = start => {
        const current = data.slice(start,start + 10)
        leaderboard = ""
        var i = start+1;
        
       current.forEach(async g => {
            var ign = await mcapi.uuidToUsername(g.uuid) //This converts the UUID to UserName
            leaderboard += "`" + `#${i}` + "` " + "`" + `${ign}` + "`" + ` - **${g.quantiagxp}**` + `\n`
            i += 1
    });
    
        const embed = new MessageEmbed()
        .setTitle(`EVENTOGXP TOP ${start + 1}-${start + current.length} de ${data.length}`)
        .setDescription(`${leaderboard}`)
        .setColor(blue_light)
        return embed 
      }
      
      const author = message.author
      
      message.channel.send(generateEmbed(0)).then(message => {
        if (data.length <= 10) return
        message.react('➡️')
        const collector = message.createReactionCollector(
          (reaction,user) => ['⬅️','➡️'].includes(reaction.emoji.name) && user.id === author.id,{time: 6000000}
        )
      
        let currentIndex = 0
        collector.on('collect',reaction => {
          message.reactions.removeAll().then(async () => {
            reaction.emoji.name === '⬅️' ? currentIndex -= 10 : currentIndex += 10
            message.edit(generateEmbed(currentIndex))
            if (currentIndex !== 0) await message.react('⬅️')
            if (currentIndex + 10 < data.length) message.react('➡️')
          })
        })
      })
    
      }

这是我得到的结果: object Promise error

预期的输出将是玩家的游戏内名称用户名),而不是对象 Promise。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)