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

标签 javascript node.js events singleton

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

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

相关文章:

javascript - 使用 jQuery 更改特定文件的内容

javascript - JavaScript中的Monad

node.js - Docker 容器不响应另一个容器的请求

javascript - 结合 Mongoose 和 Sails Waterline 的 Node.js

mysql - nodejs访问mysql数据库的最佳实践

javascript - 在 Google Maps API v3 中修改多边形后的事件

javascript - 循环和查找顺序命名输入时,自动填充监听器和 keyup 触发器上的 JQuery 语法错误

jquery e.target.hasClass 不工作

c# - 当有 Start 和 Stop 方法时使用 Reactive Extensions 包装事件

javascript - 使用 jQuery 从 TR 求和