Node.js EventEmitter不工作立即发射

时间:2015-06-09 06:36:15

标签: javascript node.js eventemitter

以下问题:

我有一个从EventEmitter继承事件的类save.js。

它看起来很像:

var util          = require('util');
var EventEmitter  = require('events').EventEmitter;

var save = function(pdf){
  var self = this;
  EventEmitter.call(self);

  console.log(self);

  self.emit('test', 'TEST!');

  function doSomeDatabaseStuff() {
    db.connect(function(err, connection) {
      if ( err ) self.emit('error', err);
      else {
        self.emit('test', 'TEST!');
      }
    });
}

util.inherits(save, EventEmitter);
module.exports = save;

我发起了它:

var saving = new save(pdf);

saving.on('sim', function(result){
  console.log(result);
});

所以奇怪的行为是:在从不发出console.log(self)之后的第一个emit事件。但是记录self表明该类已经继承了EventEmitter功能。 所有其他事件正确发出。 任何提示?

1 个答案:

答案 0 :(得分:2)

$.ui.ddmanager.prepareOffsets(ui.draggable.draggable('instance')); emit方法对所有当前注册的处理程序进行同步调用。

在侦听器尚未注册时调用EventEmitter之后的emit。这就解释了为什么不调用这个监听器。

如果你真的想像在这里一样在构造函数中发出一个事件,那么你应该让这个console.log始终与

异步
emit

或者你可以拥有一个非活动的构造函数,以便配置和获取新构造的对象的引用,然后使用setImmediate(function() { self.emit('test', 'TEST!'); }); .setup方法启动对象的事件活动。