回调函数仅被调用一次

时间:2018-09-29 21:39:25

标签: node.js apache-zookeeper

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

1 个答案:

答案 0 :(得分:0)

我仍然没有第二个查询的答案,但是对于第一个查询,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();