Javascript 节点JS事件未触发

Javascript 节点JS事件未触发,javascript,node.js,Javascript,Node.js,我试图在我的节点JS代码中引发一个事件,但无法找出原因 我有一个模块如下: var zookeeper = require('node-zookeeper-client'), events = require('events'), util = require('util'); var client; var KafkaZookeeperMonitor = function(){ events.EventEmitter.call(this); } util.inh

我试图在我的节点JS代码中引发一个事件,但无法找出原因

我有一个模块如下:

var zookeeper = require('node-zookeeper-client'),
    events = require('events'),
    util = require('util');
var client;

var KafkaZookeeperMonitor = function(){
    events.EventEmitter.call(this);  
}

util.inherits(KafkaZookeeperMonitor, events.EventEmitter);

KafkaZookeeperMonitor.prototype.connectToZk = function(zookeepers){
    client = zookeeper.createClient(zookeepers);
    client.connect();

    client.once('connected', function () {
        console.log('Connected to ZooKeeper');
        this.emit('connected');
    });
}

module.exports = KafkaZookeeperMonitor;
var KafkaZookeeperMonitor = require('./kafkaZookeeperMonitor'),
    kafkaStatus = new KafkaZookeeperMonitor(),
    brokerPath = '/brokers/ids';

kafkaStatus.connectToZk('192.168.50.252:2181');

kafkaStatus.once('connected', function(){
    console.log('watcher connected to Zookeeper');
})
我从index.js文件中调用它,如下所示:

var zookeeper = require('node-zookeeper-client'),
    events = require('events'),
    util = require('util');
var client;

var KafkaZookeeperMonitor = function(){
    events.EventEmitter.call(this);  
}

util.inherits(KafkaZookeeperMonitor, events.EventEmitter);

KafkaZookeeperMonitor.prototype.connectToZk = function(zookeepers){
    client = zookeeper.createClient(zookeepers);
    client.connect();

    client.once('connected', function () {
        console.log('Connected to ZooKeeper');
        this.emit('connected');
    });
}

module.exports = KafkaZookeeperMonitor;
var KafkaZookeeperMonitor = require('./kafkaZookeeperMonitor'),
    kafkaStatus = new KafkaZookeeperMonitor(),
    brokerPath = '/brokers/ids';

kafkaStatus.connectToZk('192.168.50.252:2181');

kafkaStatus.once('connected', function(){
    console.log('watcher connected to Zookeeper');
})
当我运行代码时,我会收到日志消息

“已连接到动物园管理员”

但是
this.emit('connected')似乎没有启动

我已经在网上四处查看了一下,我认为我正在正确设置我的事件发射器。有人能帮我找出哪里出了问题吗


谢谢

我不相信“这”是你所认为的

this.emit('connected');
调试并确保您的“这”是您正在寻找的


回调函数的上下文不是
KafkaZookeeperMonitorz
对象,因此
不是真正的对象实例

这应该起作用:

KafkaZookeeperMonitor.prototype.connectToZk = function(zookeepers){
  var self = this;
  client = zookeeper.createClient(zookeepers);
  client.connect();

  client.once('connected', function () {
      console.log('Connected to ZooKeeper');
      self.emit('connected');
  });
}

它没有抛出错误的原因可能是
客户端
也在扩展
事件发射器

以供参考:如果我是你,我会屏蔽该IP。:)这只是一个本地虚拟机:)你是对的,谢谢你的帮助你帮助他太多了!教所有的程序员范围@是的。。。好吧,由OP来研究和理解为什么,而不是通过编程coincidence@Maroshii同意,希望OP能这样做,因为如果他们继续按照他们要做的模式,他们将遇到许多范围问题:P