javascript - 清空数组后,代码读不到它是空的
问题描述
我正在尝试将临时信息发送到一个 json 文件,我可以将它们存储为一个对象数组,然后在一段时间后自动将文件重置为一个空数组。
代码起初读得很好并存储了信息,但是一旦它设置回一个空数组,代码就不再读取它是空的,并且仍然在不应该做的事情。当使用下面的 join 命令时,它应该检查它是否为空,如果是则返回并且不存储任何东西,直到首先有敌人。“用户加入战斗”的响应仍然发生,并且没有任何内容存储在数组中。
这是加入命令
const Discord = require('discord.js');
const fs = require('fs');
const enemySpawn = require('../EnemySpawn.json');
const { rpgbot } = require('../colors.json');
module.exports = {
name: 'join',
description: 'Used to join the grouping of players to fight an enemy that spawns',
execute(message, args) {
if (enemySpawn.length == 0) return message.channel.send('There\'s no enemy to fight!');
if (enemySpawn.some(user => user.id === message.author.id)) return message.channel.send('You already joined the current fight!');
// TODO add users stats
enemySpawn.push({
name: message.author.username,
id: message.author.id
})
fs.writeFile('./EnemySpawn.json', JSON.stringify(enemySpawn), err => {
if (err) console.error(err);
});
// TODO add current level of the user
const embed = new Discord.MessageEmbed()
.setColor(rpgbot)
.addField(`${message.author.username} joined the fight!`, '\u200B')
message.channel.send(embed);
},
};
这里是先获取敌人并存储的功能
const fs = require('fs');
const enemySpawn = require('./EnemySpawn.json');
const enemies = require('./Enemies.json')
getEnemy: function (message) {
if (!(enemySpawn.length == 0)) return;
let randomEnemy = enemies[Math.floor(Math.random() * enemies.length)];
enemySpawn.push({
enemy: randomEnemy.name,
health: randomEnemy.health
})
fs.writeFile('./EnemySpawn.json', JSON.stringify(enemySpawn), err => {
if (err) console.error(err);
});
message.channel.send(`Watch out! A ${randomEnemy.name} appeared!`);
}
这里是当有人发送一条消息时调用它的地方,该消息还具有超时功能,可在 3 秒后清除数组以进行测试
const fs = require('fs');
const functions = require('./functions.js');
let used = false;
if (!used) {
functions.getEnemy(message);
used = true;
setTimeout(function () {
used = false;
fs.writeFile('./EnemySpawn.json', JSON.stringify([]), err => {
if (err) console.error(err);
});
}, 3000);
}
解决方案
我看到您阅读 json 文件的唯一地方是:
const enemySpawn = require('../EnemySpawn.json');
并且这两个都在模块初始化中,只会在启动时执行一次。因此,在将空数组写回文件后,您永远不会再次读回它(除非您重新启动服务器)。
如果您希望再次读回该空数组,则必须在某些操作期间再次实时读取该 JSON 文件。
推荐阅读
- php - 如何在帖子中显示相册?[仅使用 PHP 和 MYSQL]
- javascript - 来自本地环境的 Angular JS 路由
- pipe - 备份和恢复 e2image 如何正确传输 lzop 的输出?
- python - 如何在数据绑定之间抓取文本?
- vue.js - 如何使用 vue chartkick 在图表中设置来自 HIGHCHARTS 的选项
- c# - 使用 Roslyn 编译解决方案时出现核心类型错误
- android - 对我的服务器进行 android 网络调用的最佳方式是什么?
- c# - 在 Linux 上使用特殊字符编译 C# 时出现意外字符“�”
- javascript - 在 Javascript 中转换数组
- python - python线程:无限循环,直到条件不起作用