当我在我的销售机器人中使用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)
})
}
}
2条答案
按热度按时间fcg9iug31#
我之前在代码中多次遇到过这个错误消息
TypeError: Cannot read properties of undefined (reading 'length')
,它通常意味着您正在尝试访问内存中尚不存在的对象的数据。在您发布的代码中,导致错误的行可能是:
因为在输出数据之前,你没有正确地检查它是否存在,我看到你使用了逻辑OR,但是有时候它并没有像预期的那样正常工作。
要解决此问题,请将检查替换为三元运算符,以查看是否在访问
item.data
的属性之前定义了item.data
。您可以将该行修改为如下所示:在访问
length
之前,检查item.data
是否存在以及是否具有conta
属性。如果这些属性中的任何一个被解析为undefined
,则默认为"0"
。slhcrj9b2#
首先,您必须使用===运算符,以便其匹配值和检查类型。
如果出现以下情况,请尝试更换: