尝试创建关卡排行榜时,Leaderboard.map 不是函数

Posted

技术标签:

【中文标题】尝试创建关卡排行榜时,Leaderboard.map 不是函数【英文标题】:Leaderboard.map is not a function when trying to create a levels leaderboard 【发布时间】:2021-05-18 02:04:47 【问题描述】:

我正在尝试启动并运行 XP/级别的排行榜(数据存储在 mongoDB 中),并且每当我运行命令时都会不断收到此类型错误(leaderboard.map 不是函数)。

我可以使用 !rank 命令检查级别,但使用 !leaderboard 命令时遇到问题。

我的排行榜代码是:

    if(command === "leaderboard" || command === "lb") 
        const rawLeaderboard = await Levels.fetchLeaderboard(message.guild.id, 5);
        if (rawLeaderboard.length < 1) return reply("PandaBot says nobody's in leaderboard yet! ????");

        const leaderboard = Levels.computeLeaderboard(client, rawLeaderboard); 

        const lb = leaderboard.map(e => `$e.position. $e.username#$e.discriminator\nLevel: $e.level\nXP: $e.xp.toLocaleString()`);

        message.channel.send(`$lb.join("\n\n")`)
    

我能想到的只是将其更改为await leaderboard.map,但我暂时无法访问计算机进行测试。

对此的任何帮助将不胜感激!

【问题讨论】:

我在该代码下方做了一个 console.log(leaderboard) 并返回 Promise [ guildID: '764347249495900170', userID: '673743545974128640', xp: 399, level: 1, position: 1, username: 'pandachu', discriminator: '2095' ] 【参考方案1】:

Levels.computeLeaderboard(client, rawLeaderboard) 返回一个承诺,因此您需要使用.then()await 来获得结果:

const leaderboard = await Levels.computeLeaderboard(client, rawLeaderboard);
const lb = leaderboard.map(
  (e) =>
    `$e.position. $e.username#$e.discriminator\nLevel: $
      e.level
    \nXP: $e.xp.toLocaleString()`,
);

message.channel.send(lb.join('\n\n'));

【讨论】:

【参考方案2】:

没关系。添加了 await Levels.computeLeaderboard 并且它工作了?

【讨论】:

以上是关于尝试创建关卡排行榜时,Leaderboard.map 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 google play 游戏服务上保存关卡?

GameCenter 显示排行榜集

Unreal Engine 4 蓝图完全学习教程—— 初步尝试

卸载 UICollectionview 并重新加载?

如何在 info.plist 文件中为特定游戏关卡中保存的颜色设置创建条目?

我正在尝试使用 Firebase 创建排行榜并显示用户名、高分、区域。