Javascript NodeJS自定义类扩展EventEmitter并要求

Javascript NodeJS自定义类扩展EventEmitter并要求,javascript,node.js,ecmascript-6,eventemitter,Javascript,Node.js,Ecmascript 6,Eventemitter,谁能解释一下为什么下面的代码不起作用: 我有一个EventManager类: const events = require('events') class EventManager extends events.EventEmitter { constructor() { super() } } const instance = new EventManager() module.exports = instance 我有一个init.js文件,需要此EventMa

谁能解释一下为什么下面的代码不起作用:

我有一个EventManager类:

const events        = require('events')

class EventManager extends events.EventEmitter {
    constructor() { super() }
}

const instance = new EventManager()

module.exports = instance
我有一个init.js文件,需要此EventManager并注册一些事件,如下所示:

const EventManager = require('./EventManager')
const processTask  = require('./processTask')

EventManager.on('startTask', (task) => {
    processTask(task)
})

EventManager.on('endTask', (task) => {
    //some code
})

const someTask = {}
EventManager.emit('startTask', someTask)
在我的processTask函数中,我调用EventManager并发出endTask事件:

// processTask.js
const EventManager  = require('../lib/EventManager')
module.exports = (task) => {

  // some code

  EventManager.emit('endTask')
}

但是endTask从未发出,为什么?

这是//某些代码中的一个问题。thx@Bergi和@Geek

从不从模块导出本地类的单个实例。那你为什么要继承呢?到底什么是
//一些代码
?您是否遇到任何异常?运行代码并将EventManager.emit('endTask')放在processTask文件的setTimeout内对我来说很有用。我会注释掉你所有的“一些代码”,看看它是否有效。如果是这样,那么它可能没有到达emit调用。@Bergi,为什么导出本地类的单个实例不好?这与模块缓存有关吗?不,只是对于单个实例,创建一个包含所有继承开销的类是毫无意义的。如果要导出单例,请将其设置为对象文字(或者,在您的情况下,设置为根据需要修改的
新EventEmitter
)。