【问题标题】:Event emitter doesn't emit events事件发射器不发射事件
【发布时间】:2016-02-14 15:26:32
【问题描述】:

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

文件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 中我应该需要什么?

【问题讨论】:

  • 看起来您的代码不应该发出事件。您只需分配一个发射器。
  • @grabantot - 在捕获中我发出事件,我想在其他模块中捕获它
  • bb.js 中,你是否真的调用过preProcess 以触发promise 的catch?你没有展示任何东西。如果您提供MCVE (C = "complete"),我们可以为您提供更好的帮助。
  • @T.J.Crowder - 我不使用 preProcess 我只想收听事件 eventEmitterIns ,我知道它在预处理过程中,但我该如何克服这个问题?
  • 给我们更多的代码,这样我们就可以看到catch被调用了。或者尝试自己在aa.js 中设置断点。

标签: javascript node.js dom-events eventemitter


【解决方案1】:

你必须调用 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);
});

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

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

【讨论】:

  • 谢谢,但是对于 preProcess 我需要调用不同的模块,所以我如何才能改变它来工作呢?
  • @shopiaT 那么问题是 start() 函数,你运行它吗?
  • 当然是的,否则它不会发出事件,在调试器中我将 bp 放入发出并停止......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多