繁体   English   中英

Node.js EventEmitter无法立即发射

[英]Node.js EventEmitter not working on immediate emit

出现以下问题:

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

它看起来像:

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)之后的第一个发出事件。 但是记录自我显示该类已经继承了EventEmitter功能。 所有其他事件均正确发出。 有什么提示吗?

EventEmitteremit方法对所有当前注册的处理程序进行同步调用。

在尚未注册侦听器时调用console.log之后的emit 这解释了为什么不调用此侦听器的原因。

如果你真的想在构造函数中发出一个事件像你这样在这里,你应该让这个emit总是与异步

setImmediate(function() {
   self.emit('test', 'TEST!');
});

或者您可以使用一个不活动的构造函数,以便在新构造的对象上配置和获取引用,然后使用一个.setup.init方法启动该对象的事件活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM