javascript TypeError:无法读取未定义(阅读“length”)的unhandledRejection的属性

kcugc4gi  于 2023-02-18  发布在  Java
关注(0)|答案(2)|浏览(149)

当我在我的销售机器人中使用stock命令时,我得到了这个:TypeError:无法读取未定义(读取"length")的unhandledRejection的属性
我的代码

const Discord = require("discord.js")
const db = require("quick.db")
const config = require("../config.json")
module.exports = {
    
    name: "stock", // Coloque o nome do comando do arquivo
    run: async(client, message, args) => {
        message.delete()
        const embederro = new Discord.MessageEmbed()
        .setTitle(`Erro - Permissão`)
        .setDescription(`Você não tem permissão para isto!`)
        .setColor(config.cor)
        .setFooter({text:`${config.nomebot} - Todos os direitos reservados.`})
        if (!message.member.permissions.has("ADMINISTRATOR")) return message.channel.send({ embeds: [embederro] }).then(msg => {
                    setTimeout(() => msg.delete(), 5000)
                })
                const embednprod = new Discord.MessageEmbed()
                .setTitle("Erro - Sistema de Estoque")
                .setDescription("Você não tem nenhum produto adicionado, utilize \`[add]\` para criar o produto!")
                .setColor(config.cor)
        if(db.all().length == 0) return message.channel.send({embeds: [embednprod]}).then(msg => {
            setTimeout(() => msg.delete(), 10000)
        })
const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data.conta.length || "0"}`)
const embed = new Discord.MessageEmbed()
.setTitle("Estoque")
.setDescription(`\`\`\`${itens.join("\n\n")}\`\`\``)
.setColor(config.cor)
message.channel.send({embeds: [embed]}).then(msg => {
    setTimeout(() => msg.delete(), 10000)
})

    }
}
fcg9iug3

fcg9iug31#

我之前在代码中多次遇到过这个错误消息TypeError: Cannot read properties of undefined (reading 'length'),它通常意味着您正在尝试访问内存中尚不存在的对象的数据。
在您发布的代码中,导致错误的行可能是:

const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data.conta.length || "0"}`)

因为在输出数据之前,你没有正确地检查它是否存在,我看到你使用了逻辑OR,但是有时候它并没有像预期的那样正常工作。
要解决此问题,请将检查替换为三元运算符,以查看是否在访问item.data的属性之前定义了item.data。您可以将该行修改为如下所示:

const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data && item.data.conta ? item.data.conta.length : "0"}`)

在访问length之前,检查item.data是否存在以及是否具有conta属性。如果这些属性中的任何一个被解析为undefined,则默认为"0"

slhcrj9b

slhcrj9b2#

首先,您必须使用===运算符,以便其匹配值和检查类型。
如果出现以下情况,请尝试更换:

if(db.all().length == 0 || undefined) return message.channel.send({embeds: [embednprod]}).then(msg => {
            setTimeout(() => msg.delete(), 10000)
        })

相关问题