Singleton无法在多个文件Nodejs中使用

问题描述 投票:0回答:1

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

在文件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
}

Howere,在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 node.js events singleton
1个回答
0
投票
我没有发现您创建单例的方式有任何问题。我试过了,它也很好用。当我需要两个文件时,它给了我相同的实例。

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

© www.soinside.com 2019 - 2024. All rights reserved.