TypeError:无法读取未定义的属性(读取‘长度’)unhandledRejection
2023-02-17
2449
当我在销售机器人中使用股票命令时,我收到此信息: TypeError:无法读取未定义(读取“长度”)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)
})
}
}
2个回答
我之前多次在我的代码中收到此错误消息
TypeError:无法读取未定义的属性(读取'length')
,这通常意味着您正在尝试从内存中尚不存在的对象访问数据。
在您发布的代码中,导致错误的行可能是:
const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data.conta.length || "0"}`)
因为您在输出数据之前没有正确检查它是否存在。我看到您为此使用了逻辑或,但有时它不能按预期正常工作。
要解决此问题,请用三元运算符替换检查,以查看在访问其属性之前是否定义了
item.data
。您可以将这一行修改为类似以下内容:
const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data && item.data.conta ? item.data.conta.length : "0"}`)
这将检查
item.data
是否存在,以及在访问其
length
之前是否具有
conta
属性。如果这两个属性中的任何一个被解析为
undefined
,则它将默认为
“0”
。
Joe
2023-02-17
首先,您必须使用 === 运算符,以便它也能匹配值并检查类型。
尝试替换 if 条件,如下所示:
if(db.all().length == 0 || undefined) return message.channel.send({embeds: [embednprod]}).then(msg => {
setTimeout(() => msg.delete(), 10000)
})
Satish Birhade
2023-02-17