代码之家  ›  专栏  ›  技术社区  ›  7_R3X

回调函数只被调用一次

  •  0
  • 7_R3X  · 技术社区  · 6 年前

    我正在写一个ZooKeeper客户端来监视一个节点。回调函数只在我第一次更改节点的数据时被调用。我不知道为什么函数在第二次更改时不执行。

    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 回复  |  直到 6 年前
        1
  •  0
  •   7_R3X    6 年前

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