尝试制作排行榜命令并收到此错误类型错误:无法读取未定义的属性“拆分”

问题描述

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);
  }
  }

尝试创建排行榜命令并收到此错误类型错误:无法读取未定义的属性“拆分”。我一直在寻找答案,但到目前为止我还没有看到任何特定于我的情况。有人可以帮忙吗?

解决方法

您似乎在函数中进行了大量异步调用。可能发生的情况是您调用 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 中的异步函数