回调函数只被调用一次

Callback function gets called only once

我正在编写 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();