我是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
部分位于底部,调用函数根本不会获取数据。我曾经创造过一个构造函数,但即便如此,我也无法让它工作。
非常感谢任何建议/想法。
答案 0 :(得分:3)
我不会为此使用事件发射器。而是创建一个模块:
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文件。