繁体   English   中英

事件发射器不发射事件

[英]Event emitter doesn't emit events

我有如下模块,我想发出这样的事件:

文件aa.js

var EventEmitter = require("events").EventEmitter,
    eventEmitterIns = new EventEmitter();
        
var preProcess = function (cb) {
    ...
    var start = function () {
        ....
     }).catch(function (err) {
        //-------------HERE I EMIT THE EVENT-----------
        eventEmitterIns.emit('test');
    }
  }
}

module.exports = {
      preProcess: preProcess,
      eventEmitterIns: eventEmitterIns
};

现在,当我执行以下操作时,我希望在其他模块中捕获此错误事件,但它对我不起作用:

bb.js

var invokeAppEvents = require('../controller/aa');

    invokeAppEvents.eventEmitterIns.on('test', function () {
        debugger;

    }

);

如果我放置断点,它不会在调试器中停止; 我怎样才能克服这个?

调用 catch 块内的代码!

我应该在 aa.js 中导出什么,在 bb.js 中我应该需要什么?

您必须调用preProcess()和内部start()函数来获取您的事件。 例子:

aa.js

var EventEmitter = require("events").EventEmitter;
var eventEmitterIns = new EventEmitter();

var preProcess = function (cb) {
    var start = function () {
        Promise.reject('error...')
            .catch(function (err) {
                eventEmitterIns.emit('test', err);
            });
    }
    start(); // << start() be must called somewhere
}

module.exports = {
    preProcess: preProcess,
    eventEmitterIns: eventEmitterIns
};

bb.js

var invokeAppEvents = require('./aa');

// preProcess() must be called so start() can run
invokeAppEvents.preProcess();

invokeAppEvents.eventEmitterIns.on('test', function (data) {
    console.log('test event received: ' + data);
});

正如预期的那样,这输出:

收到测试事件:错误...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM