Ошибка типа: ‘x’ не поддается повторению

#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. Тогда мне кажется, что вы просто получаете доступ к чему-то, чего не существует на том пути, к которому вы пытаетесь получить доступ в базе данных. Итак, чтобы исправить вашу проблему, просто добавьте условие, которое проверяет, действительно ли вы получили что-то обратно из своего запроса в БД. Если вы это сделали, запустите свою логику, если нет, просто верните. И если вы должны всегда получать что-то обратно, тогда проверьте остальную часть своего кода