所以,我正在开发一个有几个函数的discord bot。我使用的是node.js和discord.js。我把代码分解成几个文件,因为它太长了,所以现在我需要一些东西在函数之间传递全局变量,并每次更新它们。
我尝试的第一种方法是通过参数,但其他函数的变量不会改变。
1.
async function prepare(message, parameters)
{
// Code here
}
对于第二种方法,我尝试使用JSON对象。为了读取和更新值,我使用了readFile
和writeFile
。问题是,在编写JSON对象时,一些数据丢失了,因为出于某些原因,这些值被简化了,之后会产生错误。特别是,损坏的值来自ReactionCollector
对象。
2.
// Reads external JSON object.
let rawdata = fs.readFileSync('config.json');
let obj = JSON.parse(rawdata);
// do something with obj.
// Writes JSON object.
let data = JSON.stringify(obj);
fs.writeFileSync('config.json', data);
我的最后一次尝试是使用不同类型的writeFile函数,它保留了数据,但在多次读取JSON对象时会产生问题。
3.
// Reads external JSON object.
const readFile = promisify(fs.readFile);
var data = await readFile('../config.json', { encoding: 'utf8' });
let obj = JSON.parse(data);
// Do something.
// Updates JSON object.
fs.writeFile('../config.json', packageJson, { encoding: 'utf8' }, err => {
if (err) throw err;
console.log("Wrote json.");
});
有人能让这个代码工作吗?
我发现最好、更简单的方法是为每个变量使用getter/setter函数。
这是一个例子:
var binary_tree = [];
function setBinary_tree(bt)
{
binary_tree = bt;
}
function getBinary_tree()
{
return binary_tree;
}
module.exports.setBinary_tree = setBinary_tree;
然后这里是如何将变量传递到外部文件:
const { getBinary_tree, setBinary_tree } = require('./path/variables.js');
var binary_tree = getBinary_tree();
// Do something with the variable.
// At the end, updates the variables.
setBinary_tree(binary_tree);