尝试制作排行榜命令并收到此错误 TypeError: Cannot read property 'split' of undefined

Posted

技术标签:

【中文标题】尝试制作排行榜命令并收到此错误 TypeError: Cannot read property \'split\' of undefined【英文标题】:trying to make a leaderboard command and got this error TypeError: Cannot read property 'split' of undefined尝试制作排行榜命令并收到此错误 TypeError: Cannot read property 'split' of undefined 【发布时间】:2021-07-28 06:12:41 【问题描述】:
const  MessageEmbed  = require('discord.js');
  const fs = require('fs');
  const db = require('quick.db');
  const bot = ('Discord.Client')
  module.exports = 
      name: 'leaderboard',
  
  description: "idk something",
execute(message, args) 
    let money = db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data);
    console.log(money)
            if (!money.length) 
                let noEmbed = new MessageEmbed()
                    .setAuthor(message.member.displayName, message.author.displayAvatarURL())
                    .setColor("BLUE")
                    .setFooter("No leaderboard")
                return message.channel.send(noEmbed)
            ;
    
            money.length = 10;
            var finalLb = "";
            for (var i in money) 
                let currency1;
                let fetched = db.fetch(`money_$message.guild.id`);
                if (fetched == null) 
                    currency1 = '????'
                 else 
                    currency1 = fetched
                
                if (money[i].data === null) money[i].data = 0
                finalLb += `**$money.indexOf(money[i]) + 1.$message.guild.members.fetch(money.ID.split('_')[1]) ? message.guild.members.fetch(money.ID.split('_')[1]).tag : ""** - $money.data $currency1\n`;
            ;
    
            const embed = new MessageEmbed()
                .setTitle(message.guild.name)
                .setColor("BLUE")
                .setDescription(finalLb)
                .setTimestamp()
                .setFooter('Command: !help for currency commands')
            message.channel.send(embed);
  
  

尝试创建排行榜命令并收到此错误 TypeError: Cannot read property 'split' of undefined。我一直在寻找答案,但到目前为止,我还没有看到任何特定于我的情况的东西。谁能帮忙?

【问题讨论】:

“未定义”表示方法扩展的属性未定义。在这种情况下,money.ID 返回 undefined。 【参考方案1】:

您似乎在函数中进行了很多异步调用。可能发生的情况是您调用 split 函数的字符串值不存在,因为来自服务器的数据尚未到达客户端。

要解决此问题,请在函数名称(执行)之前添加关键字“async”,并在对 db 的所有函数调用之前添加关键字“await”

async execute(message, args)
...


    let money = await db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data);

     let fetched = await db.fetch(`money_$message.guild.id`);

我还建议您阅读 javascript 中的异步函数

【讨论】:

谢谢,试试这个 不幸的是,它没有改变任何东西。

以上是关于尝试制作排行榜命令并收到此错误 TypeError: Cannot read property 'split' of undefined的主要内容,如果未能解决你的问题,请参考以下文章

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

我如何循环遍历数据库中的每个公会成员(quick.db)

我正在尝试定义 LSTM 并收到错误“TypeError: add() missing 1 required positional argument: 'layer'”

我收到“TypeError:'list' object is not callable”。如何修复此错误? [复制]

电子中的奇怪错误。未捕获的异常:TypeError [ERR_INVALID_ARG_TYPE]:“路径”

尝试在 python 中安装 ant 模块并收到此错误