node.js - 回调函数只被调用一次
问题描述
我正在编写一个 ZooKeeper 客户端来监视一个节点。回调函数仅在我第一次更改节点数据时被调用。我不确定为什么该函数不会在第二次更改时执行。
第二个查询是,如果我取消对最后一个close()
函数的注释,我的程序将终止。作为一个好的做法,我应该使用该close()
函数,但它不会进入阻塞状态来监听传入的事件。我如何实现它?我已经阅读了文档,但找不到任何有用的东西。
var zookeeper = require("node-zookeeper-client");
var client = zookeeper.createClient("192.168.43.172:2181");
var path = process.argv[2];
client.once("connected", function() {
console.log("Connected to the server.");
client.create(path, new Buffer("data"), function(error) {
if (error) {
console.log("Failed to create node: %s due to: %s.", path, error);
} else {
console.log("Node: %s is successfully created.", path);
}
});
client.getData(
path,
function(event) {
console.log("Got event: %s.", event);
},
function(error, data, stat) {
if (error) {
console.log(error.stack);
return;
}
console.log("Got data: %s", data.toString("utf8"));
}
);
//client.close();
});
client.connect();
解决方案
我的第二个查询仍然没有答案,但对于第一个查询,zookeeper 服务器旨在仅在第一次发生更改时发送事件,然后删除开关。为了继续接收事件,我不得不在处理触发事件时再次设置手表。下面是我的代码:
var zookeeper = require("node-zookeeper-client");
var client = zookeeper.createClient("192.168.43.172:2181");
var path = process.argv[2];
client.once("connected", function() {
console.log("Connected to the server.");
var watch = function(event) {
console.log("Got event: %s.", event);
client.getData(path, watch, getDat);
};
var getDat = function(error, data, stat) {
if (error) {
console.log(error.stack);
return;
}
console.log("Got data: %s", data.toString("utf8"));
};
client.getData(path, watch, getDat);
// client.close();
});
client.connect();
推荐阅读
- python - 拆分字母数字和其他字符串
- c# - 在输入为字符串的 Linq 查询中使用枚举 Tryparse,输出为以枚举为值的 dict
- rust - 具有生命周期值的 Rust 函数返回类型
- java - jacoco.exec 覆盖不会删除排除文件的覆盖
- javascript - Javascript 总是只使用 if 语句中定义的第一个变量
- r - FELM weights argument broken in R?
- arrays - Home work problem that I cant visualize to understand Python Numpy (Newbie)
- django - Django-filter 字段名称是一个 python 内置关键字
- arrays - 如何在 Flutter 中解析这个 JSON 数组?
- python - 使用变量时的Python SQLite3绑定错误