gpt4 book ai didi

javascript - 单例无法跨多个文件 Nodejs 工作

转载 作者:行者123 更新时间:2023-12-02 21:32:00 25 4
gpt4 key购买 nike

我尝试创建事件发射器的单例实例,如下所示

在 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)

我有一个不同的实例(两个实例中的测试属性不同)

MyEmitter {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
test: 0.9233626983577679,
[Symbol(kCapture)]: false
}

如何跨多个文件获取单例实例???

提前致谢!!

最佳答案

我认为您创建单例的方式没有任何问题。我尝试过这个,效果也很好。当我需要两个文件时,它给了我相同的实例。

此外,关于发出事件,您需要确保在注册监听器后需要发出事件。如果您首先运行已发出部分的文件,则数据将被发出,并且由于没有监听器,因此数据将丢失。我想这就是你的情况所发生的情况。确保顺序正确。

关于javascript - 单例无法跨多个文件 Nodejs 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60600402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com