节点JS事件未启动
Node JS event not firing
我试图在我的节点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;
我从我的index.js文件中调用它,如下所示:
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');
})
当我运行代码时,我会收到日志消息
"已连接到动物园管理员"
但是CCD_ 1似乎没有发射。
我在网上到处看了看,我想我设置的事件发射器是正确的。有人能帮我找出哪里可能出了问题吗?
感谢
回调函数的上下文不是KafkaZookeeperMonitorz
对象,因此this
实际上不是Object实例。
这应该有效:
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');
});
}
它没有抛出错误的原因可能是client
也在扩展EventEmitter
我不相信"这"是你认为的…
this.emit('connected');
调试并确保您的"this"是您要查找的。。。
http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/
相关文章:
- 从控制器返回后Ajax启动事件激发
- 触摸启动事件未在iframe iOS 6中启动
- preventDefault之后的重新启动事件
- 如何获取在一系列事件中启动事件的元素
- 当窗口打开时,IE9在加载前启动事件
- 我的 JS 代码中的会话启动事件
- 仅当前一个事件完全完成时,才启动事件
- jQuery UI - 如何区分拖动/调整大小启动事件和单击事件
- Javascript “卡住”键(未注册的键启动事件)
- pace.js:“启动”事件未触发
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 如何将“拖动启动”事件与 CKEditor 实例分离
- 触摸启动事件上的Javascript触发函数
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 触摸启动事件未在原来隐藏的按钮上工作
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 检测浏览器窗口是否处于活动状态,并在窗口再次处于活动状态后启动事件[JavaScript]
- 如何检测浏览器是否支持手势启动事件
- 首先启动事件,然后转到url
- 在IE7中无法捕获鼠标启动事件