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