1

我正在尝试从orders.json文件中访问数据。它应该列出所有orders,但是,当我尝试这样做时,它会显示“未定义”,如下图所示:

在此处输入图像描述

orders当JSON 文件中没有任何内容时,它也会执行相同的操作:

在此处输入图像描述

.list命令代码:

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) => {
            let orderString;
            for(let x in orderDB) {
                orderString = orderString + "`" + x + "`: " + orderDB[x].status + "\n";
                // add newline character at the end to display each "order" on a separate line
            }
            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);
        });
    }
}

json文件中的数据存储如下:

{
    "tip": {
        "orderID": "tip",
        "userID": "734532125021307001",
        "guildID": "745409671430668389",
        "guild": "Cybers Taco Stand Server",
        "channelID": "746423099871985755",
        "order": "a",
        "customer": "Aro#1221",
        "status": "Unclaimed",
        "ticketChannelMessageID": "not set"
    },
}
4

2 回答 2

0

这很明显,您定义orderString了但没有为其分配值,然后您做了:

orderString = orderString + "`" + x + "`: " + orderDB[x].status + "\n";

但是orderString没有定义,所以它肯定会说undefinedtip.

于 2021-01-11T23:30:22.870 回答
0

没有被赋值的变量是类型undefined。当您声明变量orderString并且不分配值时,它将是undefined.

不幸的是,JavaScript 允许通过简单地将非字符串转换为字符串来连接不同的类型。在这种情况下undefined"undefined".

let undef;
let str = 'string';
console.log(undef + str)

要解决您的问题,您可以将空字符串分配给orderString

let orderString = '';

检查下面的片段。我还尝试使用模板文字来简化字符串连接。

const orderDB = {
  "tip": {
    "orderID": "tip",
    "userID": "734532125021307001",
    "guildID": "745409671430668389",
    "guild": "Cybers Taco Stand Server",
    "channelID": "746423099871985755",
    "order": "a",
    "customer": "Aro#1221",
    "status": "Unclaimed",
    "ticketChannelMessageID": "not set"
  },
  "ysh": {
    "orderID": "ysh",
    "userID": "734532125021307001",
    "guildID": "745409671430668389",
    "guild": "Cybers Taco Stand Server",
    "channelID": "746423099871985755",
    "order": "a",
    "customer": "Aro#1221",
    "status": "Ready",
    "ticketChannelMessageID": "not set"
  },
}
let orderString = '';

for (let key in orderDB) {
  orderString += `\`${key}\`: ${orderDB[key].status}\n`;
}

console.log(orderString)

于 2021-01-13T21:30:43.550 回答