2016-05-05 48 views
1

我正在研究一個類,WorkflowParent,它既是EventEmitter也是子類型爲EventEmitter的屬性。NodeJS EventEmitter沒有觸發

我想讓這個類從它的子屬性中截取一些事件並用不同的事件名重新發射它們。

看起來我正在做對,但它不工作。這裏是我的代碼:

var _ = require('lodash'); 
var EventEmitter = require('events').EventEmitter; 
var awsswf = require('aws-swf'); 
var swf = awsswf.createClient(); 
var util = require('util'); 

function WorkflowParent(){ 
    EventEmitter.call(this); 
    var me = this; 

    //Create decider object 
    me.decider = new awsswf.Decider({}); // <---- THIS IS AN EventEmitter 

    //Emit events from `decider` and `actor` objects 
    ['poll'].forEach(function(eventName){ 
     me.decider.on(eventName, function(event){ 
      console.log('decider event "'+eventName+'"', event); // <---- THIS IS EXECUTED 
      var attached = me.emit(eventName+'.decider', event); // emit "poll.decider" event 
      console.log('attached to poll.decider event?', attached); // <---- THIS IS `false` 
     }); 
    }); 

} 

util.inherits(WorkflowParent, EventEmitter); 

WorkflowParent.prototype.start = function(){ 
    this.on('poll.decider', function(event){ 
     console.log('poll.decider event triggered!'); // <---- THIS NEVER RUNS 
    }); 
    this.decider.start(); 
}; 


module.exports = new WorkflowParent(); 

回答

1

事實證明,你不能從EventEmitter繼承的類使用名爲domain屬性。我將me.domain更名爲me._domain,它工作正常。

在這裏發現了這個錯誤信息:https://github.com/nodejs/node-v0.x-archive/issues/3922

如錯誤指出,任何與域屬性,這也是一個 EventEmitter都將有這個矛盾。