单例不能跨多个文件 Nodejs
Singleton not work across mutiple file Nodejs
我尝试创建一个 Event Emitter 的单例实例,如下所示
在文件中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
}
如何跨多个文件获取单例实例???
提前致谢!!
我没有发现您创建单例的方式有任何问题。我试过了,它也工作正常。当我需要两个文件时,它给了我相同的实例。
此外,关于发射事件,您需要确保在注册侦听器后需要发生事件发射。如果您 运行 您的文件首先发出部分,则数据将被发出,并且由于没有侦听器,它将丢失。我想这就是你的情况。确保顺序正确。
我尝试创建一个 Event Emitter 的单例实例,如下所示
在文件中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
}
如何跨多个文件获取单例实例???
提前致谢!!
我没有发现您创建单例的方式有任何问题。我试过了,它也工作正常。当我需要两个文件时,它给了我相同的实例。
此外,关于发射事件,您需要确保在注册侦听器后需要发生事件发射。如果您 运行 您的文件首先发出部分,则数据将被发出,并且由于没有侦听器,它将丢失。我想这就是你的情况。确保顺序正确。