我是 NodeJS 的初学者,所以我不完全确定实现这一目标的最佳方法是什么。基本上我想创建一个带有字符串的全局变量,例如“USD”,每当我的“设置货币”事件被触发时,该变量就会更新。我希望它保持这种状态,直到再次调用该事件。
我正在使用 EventEmitter 来触发一些事件,在我的一个文件中我有以下内容。
var event = require('./events');
if (msg.content.includes('!currency set currency')) {
split = msg.content.split(' ');
event.emit('setCurrency', split[3])
}
然后在事件文件中我正在执行如下操作。
var exchangePref;
var event = new events.EventEmitter();
event.on('setExchange', (exchange) => {
exchangePref = exchange;
return exchangePref;
});
modules.exports = event;
我知道在回调中重写变量不会执行我需要它执行的操作,但由于底部的 modules.exports = event
部分,我对如何实现我需要它执行的操作感到非常迷失,调用函数根本无法获取数据。我尝试过创建一个构造函数,但仍然无法让它工作。
任何建议/想法将不胜感激。
最佳答案
我不会为此使用事件发射器。相反,按照以下方式创建一个模块:
var exchangePrefs = { currency: "JPY" };
module.exports = {
setCurrency : function(newVal){ exchangePrefs.currency = newVal; },
getCurrency : function(){ return exchangePrefs.currency; }
};
然后在您的各种其他模块中,您只需:
require('./mymodule').setCurrency('USD');
还有其他地方
var currency = require('./mymodule').getCurrency();
我确信它可以变得更漂亮,但我想你明白了。对于几乎所有的意图和目的,模块都像单例一样工作。虽然存在一些问题,但不会经常遇到。 (Singleton pattern in nodejs - is it needed?)
就个人而言,我会在 ExchangePref 模块中使用某种数据持久性,只是为了安心。像redis一样,或者保存到json文件。
关于javascript - 使用 NodeJS 更新全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252060/