Javascript 逐步将数据输入json文件

Javascript 逐步将数据输入json文件,javascript,discord,discord.js,Javascript,Discord,Discord.js,首先,我完全不懂javascript,所以我的问题或代码可能很糟糕,但请保持冷静 这个程序本应创建一个新的文本频道,在该频道中,您可以创建一个角色,其中包含诸如“输入角色名称:”之类的问题。然后你把角色的名字写进了频道,然后它必须被保存,这样在所有的问题之后,所有角色的数据都可以被输入并分离到Json文件中。字符数据库 我的代码: ... const exampleEmbed = new Discord.MessageEmbed() .setColor('#1EBF8B') .

首先,我完全不懂javascript,所以我的问题或代码可能很糟糕,但请保持冷静

这个程序本应创建一个新的文本频道,在该频道中,您可以创建一个角色,其中包含诸如“输入角色名称:”之类的问题。然后你把角色的名字写进了频道,然后它必须被保存,这样在所有的问题之后,所有角色的数据都可以被输入并分离到Json文件中。字符数据库

我的代码:

...

const exampleEmbed = new Discord.MessageEmbed()
    .setColor('#1EBF8B')
    .addFields(
    { name: `enter character's name`, value: `**name** **surname**` },
    )




    const Ageembed = new Discord.MessageEmbed()
    .setColor('#1EBF8B')
    .addFields(
    { name: `enter character's age`, value: `**age**` },
    )
    

    const Raceembed = new Discord.MessageEmbed()
    .setColor('#1EBF8B')
    .addFields(
    { name: `enter character's race:`, value: `**race**` },
    )


    const bioembed = new Discord.MessageEmbed()
    .setColor('#1EBF8B')
    .addFields(
    { name: `enter biography: `, value: `**. . .**` },
    )


    const linkembed = new Discord.MessageEmbed()
    .setColor('#1EBF8B')
    .addFields(
    { name: `enter image link`, value: `**http://..**` },
    )




    message.guild.channels.create(`${message.author.username}`, {
        type: 'text',
        permissionOverwrites: [
           {
             id: everyone.id,
             deny: ['VIEW_CHANNEL'],
          },
          {
              id: message.author.id,
              allow: ['VIEW_CHANNEL']
          }
        ],
      }) 
      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      .then(channel => {
        let channelx = message.guild.channels.cache.get(channel.id)
        let filter = m => m.author.id === message.author.id;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        channelx.send(exampleEmbed);
        channelx.awaitMessages(filter, {
         max: 1,
        time: 60000,
        errors: ['time']
    
    
    }).then(message => {

        umessage = message.first()
        let uargs = umessage.content.trim().split(/ +/);
    
        var Name1 = uargs[0]
        var Surname1 = uargs[1]
        console.log(Name1 + ' ' + Surname1 )




    
    }).then(channel => {
        channelx.send(Ageembed);
        channelx.awaitMessages(filter, {
            max: 1,
            time: 60000,
            errors: ['time']


        }).then(message => {
            umessage = message.first()
            let uargs = umessage.content.trim().split(/ +/);
           
            var Age1 = uargs[0]
           console.log(Age1)


        }).then(channel => {
            channelx.send(Raceembed);
            channelx.awaitMessages(filter,{
                max: 1,
                time: 60000,
                errors: ['time']
            })
            
           .then(message => {
            umessage = message.first()
            let uargs = umessage.content.trim().split(/ +/);
           
           
           
           var Race1 = uargs[0]
           console.log(Race1)
           
           }).then(channel => {
            channelx.send(bioembed);
            channelx.awaitMessages(filter,{
             max: 1,
             time: 1000 * 60 * 60 * 2,
             errors: ['time']
            })
            
            
            .then(message => {
             umessage = message.first()
             let uargs = umessage.content.trim()
            
            
            
            var Bio1 = uargs
            console.log(Bio1)
            
            }).then(channel => {
                channelx.send(linkembed);
                channelx.awaitMessages(filter,{
                 max: 1,
                 time: 1000 * 60 * 60 * 2,
                 errors: ['time']

                }).then(message => {
                    umessage = message.first()
                    let uargs = umessage.content.trim()
                   
                    var Link1 = uargs
                    console.log(Link1)
                   
                }).then(channel => {

                    character[message.author.id] = {
                        name: Name1,
                        surname: Surname1,
                        age: Age1,
                        race: Race1,
                        bio: Bio1,
                        link: Link1

                    }
                    try {
                        fs.writeFileSync('../characters.json', JSON.stringify(character));
                      } catch(err) {
                        console.error(err);
                      }

                })
                
            })
            
            })

           })
       })
})
       
...
json文件应该包含如下数据

{"id here":{"name":...,"surname":...}}
等等

简单地说,在每次响应之后,使用.then()函数,它将移动到一个新操作。但是,很显然,最后它找不到用户输入的“name1”、“name1”等

但正如所料,一切都不起作用。 bot创建了一个通道,向它发送消息,接收它们,但在将数据写入json文件时,它就死了。就是最后,

未处理的PromisejectionWarning:ReferenceError:Name1未定义

我想我知道错误是什么,但我没有一个单一的解决方案来解决这个问题

这可以做得更容易,对吗


谢谢你花时间来解决这个问题

您的
Name1
变量位于另一个作用域中,这意味着它在您试图访问它的地方不存在。为了避免这种情况,您可以在代码的开头声明该变量,然后在以后重新分配它的值。而且,您不需要有这么多
.then()
链。存在async/await,正是为了防止出现这种情况。

将代码分解,关注问题/错误,而不是在此处发布整个代码基础。错误信息非常清楚:
Name1未定义
您有范围界定问题。@Raffon,这对他没有帮助@NeArdit没有在试图访问它的回调中定义
Name1
。这是一个范围问题,与json没有任何关系。。。