【发布时间】:2020-03-09 12:17:11
【问题描述】:
我尝试创建一个事件发射器的单例实例,如下所示
在文件 mediator.js 中
const {EventEmitter} = require('events')
class MyEmitter extends EventEmitter {
constructor() {
super();
this.test = Math.random()
}
}
class Singleton {
getInstance() {
console.log(Singleton.instance)
if (!Singleton.instance) {
Singleton.instance = new MyEmitter()
}
return Singleton.instance
}
}
module.exports = Singleton
在文件 test_mediator_1.js 中,我创建了一个实例
const MyEmitter = require('./mediator')
const mediator = new MyEmitter().getInstance()
console.log(mediator)
我得到了一个实例。
MyEmitter {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
test: 0.255542039674032,
[Symbol(kCapture)]: false
}
但是,在 test_mediator_2.js 中:
const MyEmitter = require('./mediator')
const mediator = new MyEmitter().getInstance()
console.log(mediator)
我得到了一个不同的实例(2 个实例中的测试属性不同)
MyEmitter {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
test: 0.9233626983577679,
[Symbol(kCapture)]: false
}
如何跨多个文件获取单例实例???
提前致谢!!
【问题讨论】:
-
你的例子完全没问题,你的单例工作正常。您如何需要这些 test_mediator_1.js 和这些 test_mediator_2.js?
-
2个文件test_mediator_1.js和test_mediator_2.js中的2个实例不一样。因此,当我在文件 test_mediator_1 上监听事件时:``` media.on('test', (data) => console.log(data)) ``` 在文件 mediator_2.js 中,我发出一个事件:`` ` mediator.emit('test', 'hello') ``` 在 mediator_1.js 文件中没有触发事件。但是,当我在 mediator_1.js 文件中发出事件时,我仍然收到了该事件。
标签: javascript node.js events singleton