You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeError: "warnInfo" is not iterable报错及wio.db不兼容db.get解决方案咨询

报错原因与解决方案

核心问题说明

你遇到的TypeError: "warnInfo" is not iterable报错由两个问题共同导致:

  • 数组对比逻辑错误:JS中数组为引用类型,warnInfo == []永远返回false,即使warnInfo实际为空也无法触发你写的兜底返回逻辑
  • wio.db的fetch方法在对应键不存在时返回null而非空数组,非数组类型无法被for...of循环遍历

修复方案

不需要更换数据库,也不需要用到不兼容的get方法,仅需对fetch返回值做兼容处理、修正空值判断逻辑即可:

  1. 对fetch返回的warnInfo做兼容处理,非数组类型统一转换为空数组
  2. 修正空值判断逻辑,直接判断warnInfo的长度是否为0即可

修改后的完整代码

const Discord = require("discord.js")
const db = require("wio.db")
module.exports = {
  kod: "warns",
  async run (client, message, args) {
    let user;
    if(!args[0]) user = message.author
    if(args[0] && isNaN(args[0])) user = message.mentions.users.first()
    if(args[0] && !isNaN(args[0])){
        user = client.users.cache.get(args[0])
        if(!message.guild.members.cache.has(args[0])) return message.reply(":x: User not found.")
    }
    if(!user) return message.reply(":x: You must tag a user")

    const number = db.fetch(`number.${user.id}.${message.guild.id}`)
    // 对返回值做兼容处理,非数组统一转为空数组
    const warnInfo = db.fetch(`info.${user.id}.${message.guild.id}`) || []
    // 修正空判断逻辑
    if(!number || !warnInfo.length) return message.reply("Doesn't have warn")
    const warnembed = new Discord.MessageEmbed()

    for(let warnings of warnInfo){
        let mod = warnings.moderator
        let reason = warnings.reason
        let date = warnings.date
        warnembed.addField(`${user.tag} warns`,`**Moderator:** ${mod}\n**Reason:** ${reason} \n**Date:** ${date}\n**Warn ID:** \`${warnings.id}\``,true)
    }
    warnembed.setColor(message.guild.members.cache.get(user.id).roles.highest.color)
    message.channel.send(warnembed)
  }
}

内容的提问来源于stack exchange,提问作者hazzard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 02:15:04