#javascript #node.js #discord.js #node-sqlite3 #quick.db
#javascript #node.js #discord.js #узел-sqlite3 #quick.db
Вопрос:
Ошибка с quick.db
Я попытался создать команду просмотра, чтобы просмотреть подробную информацию о наказаниях пользователя и все такое. Но я получил сообщение об ошибке, warnInfo is not iterable
может ли кто-нибудь мне помочь
const Discord = require("discord.js");
const database = require("quick.db");
const config = require('../config.json');
module.exports = {
name: "view-case",
description: "View details of a user's punishment / warnings.",
async execute(message, args) {
const warnInfo = database.get(`info.${message.author.id}.${message.guild.id}`)
if(!args.length) {
// invalid usage returns
};
for(let warnings of warnInfo){
let mod = warnings.moderator
let reason = warnings.reason
let date = warnings.date
let cases = warnings.cases
let numbercase = warnings.numbercase
let dur = warnings.duration
if(args[0] === numbercase) {
let embed = new Discord.MessageEmbed()
.setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true }))
.setTitle(`Case #${numbercase}`)
.setDescription(`**Case**: ${cases} n**Moderator**: ${mod} n**Reason**: ${reason} n**Date**: ${date} n**Mute Duration**: ${dur}`)
.setColor("RANDOM")
.setTimestamp();
return message.channel.send(embed)
}
}
}
}
Журналы ошибок
(node:3308) UnhandledPromiseRejectionWarning: TypeError: warnInfo is not iterable
at Object.execute (C:UsersDS9DocumentsGitHubsarahcommandsview-case.js:29:25)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:3308) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:3308) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with
a non-zero exit code..```
Комментарии:
1. Вы проверили, что
warnInfo
это такое? Является ли это итеративным?
Ответ №1:
Обычно эта ошибка появляется, когда вы обращаетесь к «вещам», которые не являются «массивоподобными», но это довольно очевидно. По соображениям отладки просто добавьте a console.log(warnInfo)
или a debugger
после этой строки : const warnInfo = database.get(`info.${message.author.id}.${message.guild.id}`)
.
Таким образом, вы увидите тип значения, которое БД отправляет вам обратно, и сможете настроить свой код для его правильного чтения.
Я также вижу, что у вас есть execute
функция как an async function
, но я не вижу никаких ожиданий или обещаний внутри этого блока кода. Возможно, это тоже стоит исправить.
Комментарии:
1. warnInfo не определено в console.log. У меня была команда warnings и был почти тот же код с командой view-case, он работал правильно. Но для этой команды я проверяю только одно из предупреждений, а не все из них, как команда warnings
2. Тогда мне кажется, что вы просто получаете доступ к чему-то, чего не существует на том пути, к которому вы пытаетесь получить доступ в базе данных. Итак, чтобы исправить вашу проблему, просто добавьте условие, которое проверяет, действительно ли вы получили что-то обратно из своего запроса в БД. Если вы это сделали, запустите свою логику, если нет, просто верните. И если вы должны всегда получать что-то обратно, тогда проверьте остальную часть своего кода