我将数组导入到模块中,并从该数组中添加和删除项。当我推送时,它会全局地将项目添加到数组中,所以如果我在另一个模块中使用相同的数组,它将包括我推送的这个项。但是当我尝试过滤时,当同一个数组与过滤器一起运行时,它只会移除特定模块中的内容。如何使它在全球范围内修改?
let { ignore } = require('../utils/handleIgnore');
const questions = require('./quesiton');
const AgendarCollector = async (client, message) => {
ignore.push(message.from);
let counter = 0;
const filter = (m) => m.from === message.from;
const collector = client.createMessageCollector(message.from, filter, {
max: 4,
time: 1000 * 60,
});
await client.sendText(message.from, questions[counter++]);
collector.on('start', () => {});
await collector.on('collect', async (m) => {
if (m) {
if (counter < questions.length) {
await client.sendText(message.from, questions[counter++]);
}
}
});
await collector.on('end', async (all) => {
ignore = ignore.filter((ignored) => ignored !== message.from);
console.log(ignore);
const finished = [];
if (all.size < questions) {
console.log('não terminado');
}
await all.forEach((one) => finished.push(` ${one.content}`));
await client.sendText(message.from, `${finished}.\nConfirma?`);
});
};
module.exports = AgendarCollector;请参见,在此代码中,导入忽略数组,然后在代码开始时将项推送到它,并在其结束时移除。但是,当我在另一个模块中检查相同的数组时,该项将继续进行。我试图通过使用模块内的函数来更改这个忽略数组,但仍然无法工作。
let ignore = [];
const addIgnore = (message) => {
ignore.push(message.from);
};
const removeIgnore = (message) => {
ignore = ignore.filter((ignored) => ignored !== message.from);
console.log(ignore);
};
console.log(ignore);
module.exports = { ignore, addIgnore, removeIgnore };发布于 2022-09-05 15:11:56
您正在使用变量进行导入和导出,从而解决问题。
相反,使用getter。
编写一个函数,它将返回ignore数组。就像这样:
const getIgnoredList = () => {
return ignore;
};在第一个代码中,导入getIgnoredList并将ignore替换为getIgnoredList()
说明:
每当我们导入变量时,只导入特定时间的值,就会被导入,并且不会有任何数据绑定。因此,即使您认为您正在更新实际数据,也不会对数据进行任何更改。
发布于 2022-09-05 17:26:34
当你使用要求时(.)语句只执行一次。因此,当您尝试访问该属性时,它每次都会提供相同的值。相反,您应该使用getter。
let data = {
ignore : [],
get getIgnore() {
return this.ignore
}
}
module.export = {
getIgnore: data.getIgnore,
}那么在任何您想访问ignore的地方
var {getIgnore}= require('FILE_NAME')
现在:console.log(getIgnore)将调用getter并给出ignore的当前值。
使用getter将允许您访问来自其他模块的特定变量,但如果您希望更改来自其他模块的这些变量的值,则必须使用setter。
更多关于getter 这里的信息
更多关于setters 这里的信息
https://stackoverflow.com/questions/73610816
复制相似问题