2016-02-14 114 views
0

我已经喜欢folloiwng模块,我想发出事件像下面事件发射犯规发出事件

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

工作0

如果我把断点不停在调试器中,我该如何克服这个问题?

catch块内的代码被调用!

我应该在aa.js中导出哪些内容以及在bb.js中需要什么?

+0

它看起来不像你的代码应该发出事件。你只需分配一个发射器。 – grabantot

+0

@grabantot - 在catch中我发出了事件,我想在其他模块中捕获它 –

+0

在'bb.js'中,你是否真的调用'preProcess'来触发promise的catch?你没有显示任何事情。如果您提供[MCVE](/ help/mcve)(C =“complete”),我们可以帮助您更好。 –

回答

0

您必须致电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); 
}); 

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

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

+0

感谢但preProcess我需要调用不同的模块,所以我怎么能改变它的工作,甚至呢? –

+0

我需要在bb.js只需调用eventInstance ... –

+0

@shopiaT问题是start()函数,那么,你运行它吗? – Shanoor