You need to enable JavaScript to run this app. 我的discord.js list指令无法从orders.json返回全部订单内容
优惠活动
大模型
产品
解决方案
定价
更多

我的discord.js list指令无法从orders.json返回全部订单内容

问题根因
  • 核心故障来自循环拼接字符串的逻辑错误:原代码在每次遍历订单时,使用=重新为orderString赋值,每次循环都会直接覆盖掉上一次写入的内容,循环走完后字符串里只会保留最后一笔遍历到的订单,无法累积所有订单内容。
  • 附带的隐患:初始定义orderString时没有设置默认值,如果orders.json内没有任何订单数据,最终嵌入消息的描述位置会显示undefined。
修复方案

调整字符串拼接逻辑,将覆盖赋值改为内容追加,同时补充空订单场景的兼容处理即可,修改后的完整可运行代码如下:

const fsn = require("fs-nextra");
const Discord = require('discord.js');
module.exports = {
    name: 'list',
    description: 'List of all orders',
    aliases: ['allorders'],
    execute(message) {
        fsn.readJSON("./orders.json").then((orderDB) => {
            // 初始化为空字符串,避免空库时出现undefined
            let orderString = '';
            for (const orderID in orderDB) {
                const currentOrder = orderDB[orderID];
                // 用+=做内容追加,每笔订单的内容接在已有字符串末尾,不覆盖历史内容
                orderString += `\`${orderID}\`: ${currentOrder.status}\n`;
            }
            // 兼容没有任何订单的边界场景
            if (!orderString) {
                orderString = "当前没有存储任何订单";
            }
            const exampleEmbed = new Discord.MessageEmbed()
                .setTitle('Here\'s a list of the current orders and their status.')
                .setDescription(orderString)
                .setTimestamp()
                .setFooter(message.member.user.tag, message.author.avatarURL());
            message.channel.send(exampleEmbed);
        });
    }    
}
运行效果

修改后,嵌入消息会完整展示所有订单的ID与状态,示例展示效果:

`ysh`: Ready
`lhb`: Unclaimed

补充提示:Discord 的嵌入消息描述有4096字符的长度上限,如果后续订单数量较多、单条内容较长,可以再增加自动拆分、分页加载的逻辑,当前的基础场景已经可以稳定展示全部订单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 15:45:08