2016-02-14 155 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